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


      [前文]

      二叉树的递归遍历包括 先序遍历、中序遍历 和 后续遍历

      如下图所示的二叉树:

        

      前序遍历顺序为: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 }

      运行结果:

      

      

  • 相关阅读:
    【leetcode】二叉搜索树的最近公共祖先
    052-12
    052-11
    052-10
    052-9
    052-8
    052-6
    052-5
    052-3
    052-2
  • 原文地址:https://www.cnblogs.com/wgxi/p/9973749.html
Copyright © 2020-2023  润新知