c语言二叉树遍历算法,c语言的二叉树遍历

定义;bVbGbxn

关键词访问和次序, 访问决定你要做什么,次序决定按那种方式作。

前序遍历 (DLR)

//数据结构;

typedef struct

{

int data;

BiTNode *rchild;

BiTNode *lchild;

}BiTNode ,*BiTree;

void preOrderTraverse( BiTree T)

{

if(T==NULL) //递归出口;

return ;

printf("%c" ,T->data); //显示结点数目;

preOrderTraverse(T->lchild) ; //先左子树;

preOrderTraverse(T->rchild) ;// 再右子树;

}

1

如图;二叉树 bVbGbDg

bVbGbDC

bVbGbDH

bVbGbDMfna

bVbGbDT

5 再次递归调用preOrderTraverse(T->lchild)时 T=NULL, 此时递归退层,返回H 的地址,并访问 H的 H->rchild = T->rchild;

bVbGbFp

bVbGbEZ

当开始访问E结点时 访问它的左右孩子均为空返回到B 时根的左孩子即访问结束访问 ,开始执行访问根的右孩子 ;

中序遍历算法;(LDR);

void InOrdeTraverse(BiTree T)

{

if(T==NULL) //递归出口;

return ;

InOrderTraverse (T->lchild) //当T->lchild!=NULL 时就一直向下递归;

printf("%c" ,T->data); // 函数的递归退层时就输出;

InOrderTraverse(T->rchild);

}

如图所示;

bVbGbG6;

bVbGbG7;

bVbGbHy;

bVbGbHU;

D无右孩子,向上返回打印B;

bVbGbH6

bVbGbH8

bVbGbIe

1

后序遍历法 (LRD);

void PostOrderTraverse(BiTree T)

{

if(T==NULL)

return ;

PostOrderTraverse(T->lchild);

PostOrderTraverse(T->rchild); //当左为空时返回到次位置,

printf("%c" ,T->data); //

}

bVbGbMh;

1 A->B->D->H 由PostOrderTraverse(T->lchild) //一直向左访问.

2 H->lchild ==NULL ; return ;到 H 进行PostOrderTraverse(T->rchild);

3 再向下访问PostOrderTraverse(T->lchild)==NULL,return;

PostOrderTraverse(T->rchild)==NULL,return 到H;

输出k;

4 H的左右均为空输出 H ,返回到 D;

5 D位置的PostOrderTraverse(T->rchild)==NULL ,输出D,返回到 B ;

6 ,B位置的,PostOrderTraverse(T->rchild)!=NULL ,将 T指向T的左孩子位置 ,T->lchild==NULL return 返回E ,T->rchild==NULL 输出E ,返回到B ,输出B;

顺序KHDEBIFJGCA;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值