二叉树前中后序遍历及其推导

博客公告:

 (1)本博客所有博客文章搬迁至《博客虫http://blogchong.com/

                     (2)文章对应的源码下载链接参考博客虫网站首页的“代码GIT”;

                      (3)更多的相关文章更新,以及代码等,请关注博客虫网站,网站中有技术Q群,以及代码共享链接。

                 (4)该博客内容还会继续更新,不过会慢一些。

                             

 

1 文档说明

 

        该文档仅作为二叉树学习的笔记记录,包括了前中后序的遍历算法,根据前序中序推导二叉树,或者根据中序后序推导二叉树。

 

2 二叉树的前中后序遍历算法

 

//采用递归的方式进行二叉树的遍历

Status PreOrderTraverse (BiTree T, Status ( * Visit)(TElemTypee)) {

//最简单的Vist的函数如下:

// Status PrintElement (TElemType e) {

// printf ( e );   //简单的将遍历的打印

// return OK;

// }

if ( T ){                                 //若树不空

if (Visit(T -> data)) //若有根节点则访问根节点

if (PreOrderTraverse(T -> lchild, Visit))          //递归遍历左子树

if (PreOrderTraverse(T -> rchild, Visit)) //递归遍历右子树

return OK;

return ERROR;

} else return OK;             //说明已经遍历结束

}

//该遍历为先序遍历,若为中序后序,则调整访问根节点的顺序即可

 

3 二叉树的推导

 

3.1 由前序中序推导

 

已知一棵二叉树的前序序列和中序序列,构造该二叉树的过程如下:

Ø  根据前序序列的第一个元素建立根结点;

Ø  在中序序列中找到该元素,确定根结点的左右子树的中序序列;

Ø  在前序序列中确定左右子树的前序序列;

Ø  由左子树的前序序列和中序序列建立左子树;

Ø  由右子树的前序序列和中序序列建立右子树。

 

3.2 由中序后序推导

 

已知一棵二叉树的后序序列和中序序列,构造该二叉树的过程如下:

Ø  根据后序序列的最后一个元素建立根结点;

Ø  在中序序列中找到该元素,确定根结点的左右子树的中序序列;

Ø  在后序序列中确定左右子树的后序序列;

Ø  由左子树的后序序列和中序序列建立左子树;

Ø  由右子树的后序序列和中序序列建立右子树。

 

3.3 其他遍历实例

 

前序遍历:1 2 4 8 9 10 11 5 3 6 7 (规律:根在前;子树在根后且左子树比右子树靠前);

中序遍历:8 4 10 9 11 2 5 1 6 3 7 (规律:根在中;左子树在跟左边,右子树在根右边);

后序遍历:8 10 11 9 4 5 2 6 7 3 1 (规律:根在后;子树在根前且左子树比右子树靠前);

 

前序遍历:ABDECFG

中序遍历:DBEAFCG

后序遍历:DEBFGCA

 

前序遍历:1 2 4 3 5 7 6

中序遍历:2 4 1 5 7 3 6

后序遍历:4 2 7 5 6 3 1

 

4 文档小结

 

        二叉树作为一种最基本的数据结构是必须要掌握的,无论是树的扩展(包括B/B+/B*/RB树),还是之后堆排序中的完全二叉树,都有一定的关联之处。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值