C++完全二叉树计算节点

来源:百度知道 编辑:UC知道 时间:2024/06/15 10:03:12
设一棵完全二叉树共有500个结点,则在该二叉树中有______个叶子结点。
我算得256 答案是250 不知道是多少,能给出过程吗?谢谢

答案:250个叶子结点
对一棵有n个结点的完全二杈树,其深度为㏒2n+1,则对任一结点i(1≤i≤n),如果2i≥n,则其结点i为叶子结点,其叶子结点的个数为2i。
不知道这么解释你能明白否,不过这是个公式,你只要记住就好了。

让我来用初中生都会的算数来说一下吧:
设叶子节点有i个, 那么非叶子节点的个数是500 - i。
每个非叶子节点都能产生2个子节点,这些由非叶子节点产生的节点就构成了树。
根据上述过程可列等式:
2 * (500 - i) = (500 - i) + i = 500; 求得 i = 250。
不要背数据结构的公式,应该明白他的推导。

250个叶子节点.
令高度为H,因为总节点500个,大于2^8小于2^9;所以高度H应该为(8+1)=9,则最下面一层N9=500-(2^9-1)=245,倒数第二层N8=2^7=128;最下面的245个叶子结点对应123个父结点,所以倒数第二层还有叶子结点128-123=5个;所以叶子结点n=245+5=250

1
2
4
8
16
32
64
128
245
叶子节点数=128-245/2-1+245=250