二叉树详解

二叉树详解:

采用递归的方式进行遍历,这样做的好处时代码十分简洁。

递归思想:

(1)每一次函数调用都会有一次返回。当程序流执行到某一级的结尾处时,它会转移到前一级递归继续执行。

(2)递归函数中,位于递归调用前的语句和各级被调函数具有相同的顺序。

(3)递归函数中,位于递归调用语句后的语句的执行顺序和各个被调用函数顺序相反。

(4)递归函数中,必须包含可以终止递归调用的语句。

(5)每一级的函数调用都有自己的私有变量。

 

顺序存储:数组

 

链表存储:链表

typedef struct bi_t_node{

  telemetype data;

  struct bi_t_node *lchild, *rchild;

}bi_t_node, *bi_tree;

 

前序遍历:第一次到达节点时,自左向右

中序遍历:第二次到达节点时,自左向右

后序遍历:第三次到达节点时,自左向右

层序遍历:自上而下,,自左向右

 

示例:

 1 /* 二叉树前序遍历递归算法 */
 2 void pre_order_traverse(bi_tree t)
 3 {
 4     if(NULL == t)
 5         return;
 6     printf("%c", t->data);
 7 
 8     pre_order_traverse(t->lchild);
 9     pre_order_traverse(t->rchild);
10 }
11 
12 /* 二叉树的中序遍历递归算法 */
13 void in_order_traverse(bi_tree t)
14 {
15     if(NULL == t)
16         return;
17 
18     in_order_traverse(t->lchild);
19     printf("%c", t->data);
20     in_order_traverse(t->rchild);
21 }
22 
23 /* 二叉树的后续遍历递归算法 */
24 void post_order_traverse(bi_tree t)
25 {
26     if(NULL == t)
27         return;
28 
29     post_order_traverse(t->lchild);
30     post_order_traverse(t->rchild);
31     printf("%c", t->data);
32 }

 

posted on 2019-07-05 11:43  Alvin2012  阅读(202)  评论(0编辑  收藏  举报

导航