【C语言】 二叉树的遍历

 一、二叉树的遍历

遍历即将树的所有结点访问且仅访问一次。按照根节点位置的不同分为前序遍历,中序遍历,后序遍历。

前序遍历:根节点->左子树->右子树

中序遍历:左子树->根节点->右子树

后序遍历:左子树->右子树->根节点

 层次遍历:

先序遍历非递归遍历:

 1 void PreOrder1(BTNode *b)
 2 {
 3     BTNode *St[MaxSize], *p;
 4     int top = -1;
 5     ++top;
 6     St[top] = b;
 7     while (top != -1)
 8     {
 9         p = St[top];
10         --top;
11         printf(" %c ", p->data);
12         if (p->rchild != NULL)
13         {
14             ++top;
15             St[top] = p->rchild;
16         }
17         if (p->lchild != NULL)
18         {
19             ++top;
20             St[top] = p->lchild;
21         }
22     }
23 }

先序遍历递归遍历:

1 void PreOrder(BTNode *b)
2 {
3     if (b != NULL)
4     {
5         printf(" %c ", b->data);
6         PreOrder(b->rchild);
7         PreOrder(b->lchild);
8     }
9 }

 后序遍历非递归遍历:

 1 void PostOrder(BTNode *b)
 2 {
 3     BTNode *St[MaxSize], *p;
 4     int top = -1; 
 5     bool flag;
 6     if (b != NULL)
 7     {
 8         do
 9         {
10             while (b != NULL)
11             {
12                 ++top;
13                 St[top] = b;
14                 b = b->lchild;
15             }
16             p = NULL;
17             flag = true;
18 
19             while (top != -1 && flag)
20             {
21                 b = St[top];
22                 if (b->rchild == p)
23                 {
24                     printf(" %c", b->data);
25                     --top;
26                     p = b;
27                 }
28                 else
29                 {
30                     b = b->rchild;
31                     flag = false;
32                 }
33             }
34         }
35         while (top != -1);
36     }
37 }

实现二叉树的各种遍历算法

【目的】:领会二叉树的各种遍历过程以及遍历算法设计

【内容】:编写一个程序,实现二叉树的先序遍历、中序遍历和后序遍历的递归过程和非递归算法,以及层次遍历的算法。

【来源】:《数据结构教程(第五版)》李春葆著,树和二叉树实验2。

求二叉树中从叶子节点到根节点的路径

 【目的】:掌握二叉树遍历算法的运用,熟练使用先序、中序、后序3种递归和非递归遍历算法以及层次遍历算法进行二叉树问题的求解。

【内容】:编写一个程序,实现如下功能:
                 1. 采用先序遍历方法输出所有从叶子节点到根节点的逆路径。
                 2. 采用先序遍历方法输出第一条最长的逆路径。
                 3. 采用后序非递归遍历方法输出所有从叶子节点到根节点的逆路径。
                 4. 采用层次遍历方法输出所有从从叶子节点到根节点的逆路径。

【来源】:《数据结构教程(第五版)》李春葆著,树和二叉树实验2。

 Leetcode练习题

猜你喜欢

转载自www.cnblogs.com/sunbines/p/9053192.html
今日推荐