一.先序遍历
1.概念:先序遍历二叉树的操作定义为:若二叉树为空,则空操作;否则(1)访问根节点;(2)先序遍历左子树;(3)先序遍历右子树
2.代码实现
int PREORDER(TREE * tree)
{
if(tree==NULL)
return 0;
cout<<tree->data<<" ";
PREORDER(tree->left);
PREORDER(tree->right);
return 0;
}
3.举例:
struct TREE
{
int data;
TREE *left,*right;
};
<pre name="code" class="cpp">int main()
{
TREE *tree=new TREE;
tree->data=3;
TREE *p=new TREE;
p->data=5;
p->left=NULL;
tree->left=p;
p=new TREE;
p->data=7;
p->left=NULL;
p->right=NULL;
tree->left->right=p;
p=new TREE;
p->data=6;
tree->right=p;
p=new TREE;
p->data=8;
p->left=NULL;
p->right=NULL;
tree->right->left=p;
p=new TREE;
p->data=4;
p->left=NULL;
p->right=NULL;
tree->right->right=p;
PREORDER(tree);
return 0;
}结果:
二.中序遍历
1.概念:中序遍历的操作定义为:若二叉树为空,则空操作;否则,(1)中序遍历左子树;(2)访问根节点;(3)中序遍历右子树
2.代码实现
int INORDER(TREE * tree)
{
if(tree==NULL)
return 0;
INORDER(tree->left);
cout<<tree->data<<" ";
INORDER(tree->right);
return 0;
}三.后序遍历
1.概念:后序遍历的操作定义:若二叉树为空,则空操作;否则,(1)后序遍历左子树;(2)后序遍历右子树;(3)访问根节点
2.代码实现:
int POSTORDER(TREE * tree)
{
if(tree==NULL)
return 0;
POSTORDER(tree->left);
POSTORDER(tree->right);
cout<<tree->data<<" ";
return 0;
}四.层次遍历(广度优先遍历)
1.概念:层次遍历的定义为:从上到下,从左到右依次遍历每个节点直到所有的节点都被遍历完
2.代码实现
int WIDEFIRSTTREE(TREE *tree)
{
if(tree==NULL)
return 0;
std::deque<TREE *> dequetree;
dequetree.push_back(tree);
while(dequetree.size())
{
TREE *p=dequetree.front();
std::cout<<p->data<<" ";
dequetree.pop_front();
if(p->left)
dequetree.push_back(p->left);
if(p->right)
dequetree.push_back(p->right);
}
return 0;
}3.举例
struct TREE
{
int data;
TREE *left,*right;
};int main()
{
TREE *tree=new TREE; //使用上面的树作为测试用例
tree->data=3;
TREE *p=new TREE;
p->data=5;
p->left=NULL;
tree->left=p;
p=new TREE;
p->data=7;
p->left=NULL;
p->right=NULL;
tree->left->right=p;
p=new TREE;
p->data=6;
tree->right=p;
p=new TREE;
p->data=8;
p->left=NULL;
p->right=NULL;
tree->right->left=p;
p=new TREE;
p->data=4;
p->left=NULL;
p->right=NULL;
tree->right->right=p;
WIDEFIRSTTREE(tree);
return 0;
}
结果:
本文详细介绍了二叉树的先序、中序、后序及层次遍历算法,包括代码实现与具体例子,帮助读者理解不同遍历方式的特点与应用。
2234

被折叠的 条评论
为什么被折叠?



