zltzlt 发表于 2020-2-26 21:46:45

C++ 二叉树

二叉树

为什么要使用二叉树

二叉树的结构是树中最简单,而且是规律性最强的结构;

可以证明,所有树都能转化为唯一对应的二叉树,不失一般性。

二叉树的基本特征


[*]每个结点最多只有两棵子树(不存在度大于 2 的结点)
[*]左子树和右子树的次序不能颠倒(有序树)


二叉树的基本形态


[*]有左有右

[*]有左无右

[*]有右无左

[*]单根

[*]空树


二叉树的基本性质


[*]在二叉树的第 i 层上至多有 2i-1个节点(i > 0)
[*]深度为 k 的二叉树至多有 2k-1 个结点(k > 0)
[*]对于任何一棵二叉树,若度为 2 的结点数有 n2 个,叶子结点数为 n0 个,则 n0 = n2 + 1


满二叉树与完全二叉树

满二叉树:深度为 k 且有 2k-1 个结点的二叉树。

特点:每一层上的结点数都是最大结点数,可以对满二叉树的结点进行连续编号。如图:



完全二叉树:深度为 k,有 n 个结点的二叉树。当且仅当其每一个结点都与深度为 k 的满二叉树中编号从 1 至 n 的结点一一对应时,称之为完全二叉树。如图:



特点:


[*]叶子结点只可能在层次最大的两层出现
[*]对任一结点,若其右分支下子孙的最大层次数为 h,则其左分支下的子孙的最大层次数必为 h 或 h + 1


满二叉树和完全二叉树是二叉树的特例。

满二叉树一定是完全二叉树。
页: [1]
查看完整版本: C++ 二叉树