二叉树的递归遍历(先序中序和后序)
Posted wgxi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树的递归遍历(先序中序和后序)相关的知识,希望对你有一定的参考价值。
[前文]
二叉树的递归遍历包括 先序遍历、中序遍历 和 后续遍历。
如下图所示的二叉树:
前序遍历顺序为:ABCDE (先访问根节点,然后先序遍历其左子树,最后先序遍历其右子树)
中序遍历顺序为:CBDAE (先中序遍历其左子树,然后访问很节点,最后中序遍历其右子树)
后续遍历顺序为:CDBEA (先后序遍历其左子树,然后后续其右子树,最后访问根节点)
不多说,直接上代码。
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 // 二叉树的存储结构 5 typedef char ElementType; 6 typedef struct TreeNode *PtrToNode; 7 struct TreeNode { 8 ElementType Data; 9 PtrToNode Left; 10 PtrToNode Right; 11 }; 12 typedef PtrToNode BinTree; 13 14 BinTree CreateBinTree(BinTree T); 15 void PreOrderTraverse(BinTree T); 16 void InOrderTraverse(BinTree T); 17 void PostOrderTraverse(BinTree T); 18 19 int main() 20 { 21 BinTree T; 22 T = CreateBinTree(T); 23 24 printf("PreOrderTraverse: "); 25 PreOrderTraverse(T); 26 printf(" "); 27 28 printf("InOrderTraverse: "); 29 InOrderTraverse(T); 30 printf(" "); 31 32 printf("PostOrderTraverse: "); 33 PostOrderTraverse(T); 34 printf(" "); 35 36 return 0; 37 } 38 // 建立二叉树 39 BinTree CreateBinTree(BinTree T) 40 { 41 char c; 42 scanf("%c", &c); 43 if ( c != ‘#‘ ) { 44 T = (BinTree)malloc(sizeof(struct TreeNode)); 45 T->Data = c; 46 T->Left = CreateBinTree(T->Left); 47 T->Right = CreateBinTree(T->Right); 48 } else { 49 T = NULL; 50 } 51 return T; 52 } 53 // 先序遍历 54 void PostOrderTraverse(BinTree T) 55 { 56 if ( T ) { 57 PostOrderTraverse(T->Left); 58 PostOrderTraverse(T->Right); 59 printf("%c ", T->Data) 60 ; } 61 } 62 // 中序遍历 63 void InOrderTraverse(BinTree T) 64 { 65 if ( T ) { 66 InOrderTraverse(T->Left); 67 printf("%c ", T->Data); 68 InOrderTraverse(T->Right); 69 } 70 } 71 // 后序遍历 72 void PreOrderTraverse(BinTree T) 73 { 74 if ( T ) { 75 printf("%c ", T->Data); 76 PreOrderTraverse(T->Left); 77 PreOrderTraverse(T->Right); 78 } 79 }
运行结果:
以上是关于二叉树的递归遍历(先序中序和后序)的主要内容,如果未能解决你的问题,请参考以下文章