二叉树详解:
采用递归的方式进行遍历,这样做的好处时代码十分简洁。
递归思想:
(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 }