算法 {K叉树, 完整K叉树, 二叉树,完全二叉树}

算法 {K叉树, 完整K叉树, 二叉树}

K叉樹

定義

每個節點最多有K(>=2)個兒子的樹;

性質

#滿K叉樹perfect binary tree#
所有葉子節點的深度都相同的 完整K叉樹;

性質

深度為D的節點個數 最多有 K D K^D KD個;
即滿K叉樹的每個深度的節點個數是1, K, K*K, K*K*K, ...; 即滿K叉樹的總節點個數一定為1/ 1+K/ 1+K+K*K/ ...;

满K叉树

定义

设深度为H, 则第i层的节点个数为K^i;

完整K叉樹

定義

#完整K叉樹full/proper binary tree#
所有非葉子節點都有K個兒子;

性質

#完整K叉樹 有 x x x非葉子節點, 則該樹有 x ∗ K x*K xK條邊#

@DELI;

#完整K叉樹的節點個數#
任意完整K叉樹的節點個數 一定為 x ∗ K + 1 x * K + 1 xK+1 其中x= 0/1/2/3/...;
任意完整K叉樹的葉子節點個數 一定為 x ∗ ( K − 1 ) + 1 x * (K-1) + 1 x(K1)+1 其中x= 0/1/2/3/...;
證明: 將完整K叉樹的所有葉子節點去掉, 剩下的這個樹 R T RT RT 就是個K叉樹(不一定是完整K叉樹), 他倆是雙向的 即任意一個完整K叉樹 他的RT樹 一個是K叉樹, 任意一個K叉樹 一定可以是某個完整K叉樹的RT樹; 因此我們的思路 首先從所有的(非葉子幾點)入手;
. 對於一個有 x x x個節點的K叉樹, 對應上面的RT 即這 x x x個節點 都是完整K叉樹裡的非葉子節點, 將這個樹 添加邊 使其變成一個完整K叉樹, 因為這 x x x個節點 都是非葉子節點 所以他一定有 x ∗ K x*K xK邊(每個節點有K個兒子), 即整個樹有 x ∗ K + 1 x*K + 1 xK+1個點, 其中有 x ∗ K + 1 − x x*K+1 - x xK+1x個葉子節點;

即对于完整K叉树, 令x为其叶子節點的個數, y為其非葉子節點的個數, 那麼 x與y 是有線性關聯的, 即x確定了 y也就確定了 反之亦然; 同時 完整K叉樹的總節點個數確定了 那麼其x,y值也就確定了;
. 也就是 所有完整K叉樹 一定是(x=(K-1)*y+1, y=任意>=0的整數);

二叉樹

定義

K=2叉樹

完全二叉樹

定義

設二叉樹的深度為H, 如果前H-1層的子樹 是滿二叉樹, 且第H層的所有葉子節點 是從最左側開始連續的, 則該二叉樹是完全二叉樹;

性質

節點個數一旦確定, 則完全二叉樹的樹形態 是唯一的;

@DELI;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值