事实上,当使用递归时,二叉树的遍历算法基本一样,只不过是访问结点的顺序和输出结点的顺序不同。先了解下面这个有利于详细学习时的快速理解。
先序----根、左子树、右子树;
中序—左子树、根、右子树;
后序—左子树、右子树、根
层次遍历,从上到下、从左到右
下面是下面代码会用到的。
//二叉树的二叉链存储表示可描述为:
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); /*递归访问右子树*/