首页 > 其他 > 详细

二叉树的三种遍历

时间:2017-11-22 13:49:30      阅读:261      评论:0      收藏:0      [点我收藏+]

前言:搞懂非递归和递归三种遍历,二叉树的90%的问题算你全搞定了。

先序遍历:根,左子树,右子树

中序遍历:左子树,根,右子树

后序遍历:左子树,右子树,根

先序遍历序列的特点:ABCDEFGHIJK  A是树根,左子树可能是BCDEFGH右子树可能是IJK  对于B左子树可能是CD,右子树可能是EFGH。即,任一结点,它的右侧的一段元素依次是左子树,右子树。

中序遍历序列的特点:ABCDEFGHIJK   对任一结点,左侧一段是它的左子树,右侧一段是它的右子树。

后序遍历序列的特点:ABCDEFGHIJK  K是树根,对于任一结点,左侧一段结点,从左向右依次是左子树,右子树。

根据先序中序 或 后序中序 能还原一棵二叉树,根据 先序和后序 不能还原一棵二叉树。

递归遍历:

 24 /*先序递归遍历*/
 25 void DLR(BiTree *T) {
 26     if(*T != NULL) {
 27         printf("%c ",(*T)->data);
 28         DLR(&(*T)->lchild);
 29         DLR(&(*T)->rchild);
 30     }
 31 }
 32 /*中序递归遍历*/
 33 void LDR(BiTree *T) {
 34     if(*T != NULL) {
 35         LDR(&(*T)->lchild);
 36         printf("%c  ",(*T)->data);
 37         LDR(&(*T)->rchild);
 38     }
 39 }
 40 
 41 /*后序递归遍历*/
 42 void LRD(BiTree *T) {
 43     if(*T == NULL)
 44         return;
 45     LRD(&(*T)->lchild);
 46     LRD(&(*T)->rchild);
 47     printf("%c ",(*T)->data);
 48 }

非递归遍历

 

二叉树的三种遍历

原文:http://www.cnblogs.com/joyeehe/p/7878698.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!