二叉树的三种遍历
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 }
非递归遍历
以上是关于二叉树的三种遍历的主要内容,如果未能解决你的问题,请参考以下文章