二叉树的递归遍历(先序中序和后序)

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 }

  运行结果:

  技术分享图片

  

以上是关于二叉树的递归遍历(先序中序和后序)的主要内容,如果未能解决你的问题,请参考以下文章

数据结构 递归和非递归方式实现二叉树先序中序和后序遍历

输出二叉树的先序中序和后序遍历序列

树——二叉树的先序中序和后序遍历

创建二叉树非递归完成对二叉树的先序和后序遍历并遍历输出每一层的结点数查找结点P 和结点Q的最近共同祖先

二叉树的非递归遍历(先序中序后序和层序遍历)

二叉树遍历的递归实现(先序中序后序和层次遍历)