首页 > 代码库 > 二叉树(二)——遍历、深度统计、叶子结点统计、结点统计

二叉树(二)——遍历、深度统计、叶子结点统计、结点统计

1.二叉树的相关算法的实现(链表)。
#include <stdio.h>
#include <malloc.h>

#define NULL	0

typedef struct tree
{
	int data;
	struct tree *left, *right;
}ElemBT;

void create_btree(ElemBT *root, int list[], int n) /*n表示list数组中元素的个数*/
{
	int i;
	ElemBT *current, *parent, *p;

	for(i = 1; i < n; i++)
	{
		p = (ElemBT *)malloc(sizeof(ElemBT));
		p->left = p->right = NULL;
		p->data = http://www.mamicode.com/list[i];>

程序运行截图:


2.结论
(1)通过一棵二叉树的前序、中序、后序中任意两个的访问顺序可以唯一的确定一棵二叉树。
假设有二叉树的中序和后序访问顺序分别为:
中序:c, b, d, e, a, g, i, h, j, f
后序:c, e, d, b, i, j, h, g, f, a
分析:由后序遍历最末一个是a可以知道a为该树的根,再结合中序可知道c, b, d, e为其左子树,g, i, h, j, f为其右子树。又结合后序访问可以知道b, f分别为为a的左子女和右子女,再结合中序遍历可以知道b的左子女个数为1,右子女个数为2,f的左子女个数为4,右子女个数为0。依次类推可以得到如下的二叉树:
                              a
                         /          \
                     b                  f
                 /     \           /       
              c          d       g
                           \        \
                            e          h
                                       /   \           
                                     i       j