您的位置:首页 > 职场人生

阿里一道面试题——完全二叉树的最后一颗节点

2015-03-24 19:46 344 查看
今天和朋友聊天,说是阿里有道面试题。

已知一颗完全二叉树,有N个节点 求最后一个节点,亦即最后一排最右边的那个节点。



节点数目2^0+……2^(k-1)>=N >= 2^0+2^1+2^2+2^3……2^k

那么树深为k+1,最后个节点在最后层为第(N-2^0+……2^(k-1))个

如果(N-2^0+……2^k-1)>2^k/2,那么在右子树,右子树有N-2^(k-1)个节点,;

如果(N-2^0+……2^k-1)<=2^k/2,那么在左子树

从根节点出发,首先要判断是在右子树里还是在左子树里。要明确一点已知节点数目N,那么我们是可以判断最后一个节点是在第几排,第几个。如上N=15,那么是在第4排的第8个节点。而8 > 4(这里判断是在右子树还是左子树)。

现在我们从节点C作为根节点的子树,按照上面的方法,最后找到该节点。

逆向思维:

我们将所有节点标号,从1~N,那么N节点就是我们要求的节点。那么N节点的父节点为N/2,其为(N%2==1)?右节点:左节点。

以上图举例:

15 % 2 = 1 ——————所以走右边

15/2 = 7

7 % 2 = 1——————所以走右边

7/2 = 3

3 % 2 = 1——————所以走右边

1 / 2 = 0——————结束

上述15为节点数,大家可以试试看,是否正确。其实这个方法也是可以从上面那种方法归纳出来。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐