首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

二叉树的深度有关问题(顺序存储)

2013-07-04 
二叉树的深度问题(顺序存储)这是我找到的一种算法:[解决办法]引用:Quote: 引用:Quote: 引用:Quote: 引用:Q

二叉树的深度问题(顺序存储)
这是我找到的一种算法:


[解决办法]
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

Quote: 引用:

楼主你想错方向了
你看,对于深度为k的完全二叉树最大的节点数为2^k-1
i为节点数,也就是说i最大是2^k-1对吧
那么我们就可以算到 2^K = i+1 吧
k就等于log2(i+1)取整数+1对吧(do while就会让他+1)
这样的话,是不是有一种情况,就是i+1刚好为2的倍数,这个+1就多余了吧
那怎么办呢,变一下log2(i)不就可以了。这样就可以大胆+1了

请问一下i+1是2的倍数了,为什么+1却又多余了呢?
+1的话不就又多了一个左孩子结点???

2^k-1 <= i
把1放右边啊。变成i+1

你的意思是当成一个满二叉树来对待???
不过上面的程序是pow(2,j);如果最后j++的话,那深度不就又加1了,又往下移动了,不过那就会多出很多多余的空节点吧?

那么请问我给出的程序到底是对是错呢?

你这里j代表深度,不过节点数默认每次都是加了1的,就是跑到下面一层去了,但是你返回的j还是没有加1,这里我觉得有点问题的
[解决办法]
节点数 > 2^j - 1条件下继续加算一层,等同条件:节点数 >= 2^j,看起来没错吧。不过我是觉得前面算节点数有问题,完全2叉树的话这个应该是已知数,或者说程序中应当随时保持的,不然啥操作都要用上的说,每次都重找吗?

热点排行