事实上,当使用递归时,二叉树的遍历算法基本一样,只不过是访问结点的顺序和输出结点的顺序不同。先了解下面这个有利于详细学习时的快速理解。
先序----根、左子树、右子树;
中序—左子树、根、右子树;
后序—左子树、右子树、根
层次遍历,从上到下、从左到右
下面是下面代码会用到的。
//二叉树的二叉链存储表示可描述为:
typedef struct node{
ElemType data; /* 存放结点的值,ElemType是元素的基本类型 */
struct node *lchild; /* 指向左孩子结点指针*/
struct node *rchild; /* 指向右孩子结点指针 */
} BTNode;
void visite (BTNode *T) {
//即输出结点
if(T== NULL)
printf(“The node does not exist ");
else printf(“%c”,T->data);
}
先根/先序遍历
遍历过程为: ① 访问根结点; ② 先序遍历其左子树; ③ 先序遍历其右子树
void PreOrderTraverse(BTNode *T)
{
if (T!=NULL)
{
visite(T); /*访问根结点*/
PreOrderTraverse(T->lchild); /*递归访问左子树*/
PreOrderTraverse(T->rchild); /*递归访问右子树*/

本文详细介绍了二叉树的四种遍历方法:先序遍历、中序遍历、后序遍历和层次遍历。对于每种遍历方式,不仅给出了递归实现,还提供了非递归的算法思路,强调了先序、中序和后序遍历的顺序以及层次遍历的队列实现。同时,探讨了如何通过遍历序列唯一确定二叉树。
最低0.47元/天 解锁文章

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



