您的位置:首页 > 其它

2016-05-26 13:40 169 查看
二叉树

(1) 非空二叉树上叶子结点数等于双分支结点数加1;n0=n2+1;

(2) 在一棵二叉树中,所有结点的分支数等于单分支结点数加双分支结点数的2倍;

总分支数=n1+2*n2;

总结点数 = 总分支数+1;

(3) 二叉树的第i层上最多有2的i-1次幂个结点;

(4) 高度为k的二叉树最多有2的k次幂-1个结点;

(5) 具有n个结点的完全二叉树的深度为floor(log2n) + 1 。

(6) 如果对一棵有n个结点的完全二叉树(其深度为floor(log2n) + 1 )的结点按层序编号,则对任一结点i(1≤i≤n)有:

如果i = 1,则结点i是二叉树的根,无双亲;如果i > 1,则其双亲PARENT(i)是结点 floor((i)/2)。

如果2i > n,则结点i无左孩子;否则其左孩子LCHILD(i)是结点2i。

如果2i + 1 > n,则结点i无右孩子;否则其右孩子RCHILD(i)是结点2i + 1

二叉树的存储

(1) 顺序存储:适合完全二叉树;

(2)链式存储:

typedef struct BiTNode
{
TElemType data;
struct BiTNode *lchild, *rchild; // 左右孩子指针
}BiTNode, *BiTree;


遍历

(1) 先序遍历:

void preorder(BTNode *p)
{
if (p!=NULL)
{
visit(p);
preorder(p->lchild);
preorder(p->rchild);
}
}


(2) 中序遍历:

void preorder(BTNode *p)
{
if (p!=NULL)
{
preorder(p->lchild);
visit(p);
preorder(p->rchild);
}
}


(3) 后序遍历:

void preorder(BTNode *p)
{
if (p!=NULL)
{
preorder(p->lchild);
preorder(p->rchild);
visit(p);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  二叉树