二叉树的三种遍历

Posted 旗正飘飘 马正萧萧

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树的三种遍历相关的知识,希望对你有一定的参考价值。

前言:搞懂非递归和递归三种遍历,二叉树的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 }

非递归遍历

 

以上是关于二叉树的三种遍历的主要内容,如果未能解决你的问题,请参考以下文章

Python教程讲解二叉树的三种深度

二叉树的遍历

二叉树的三种非递归遍历方式(附Cjava源码)

二叉树的三种遍历对比及用图片展现

二叉树遍历的三种方法:先序遍历,中序遍历,后序遍历

二叉树的三种遍历方式