阿里一道面试题——完全二叉树的最后一颗节点
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为节点数,大家可以试试看,是否正确。其实这个方法也是可以从上面那种方法归纳出来。
已知一颗完全二叉树,有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为节点数,大家可以试试看,是否正确。其实这个方法也是可以从上面那种方法归纳出来。
相关文章推荐
- 阿里面试题之求完全二叉树的最后一层的最后一个节点
- 面试题--完全二叉树的的最后一层的最右节点
- 在单链表的第i个位置后插入一个节点(阿里+腾讯等面试题总结)
- 面试题:完全二叉树699个节点,则叶子节点有多少个?
- 阿里一道机器人面试题。
- 对于一颗完全二叉树,要求给所有节点加上一个pNext指针,指向同一层的相邻节点;如果当前节点已经是该层的最后一个节点,则将pNext指针指向NULL;给出程序实现,并分析时间复杂度和空间复杂度。
- 淘宝笔试题:一颗完全二叉树,要求给所有节点加上一个pNext指针,指向同一层的相邻节点;如果当前节点已经是该层的最后一个节点,则将pNext指针指向NULL
- 对于一颗完全二叉树,要求给所有节点加上一个pNext指针,指向同一层的相邻节点-----层序遍历的应用题
- java-多线程-一道阿里面试题分析
- 百度一道面试题--在一颗二叉排序树中查找和为某一值的所有路径
- 对于一颗完全二叉树,要求给所有节点加上一个pNext指针,指向同一层的相邻节点;如果当前节点已经是该层的最后一个节点,则将pNext指针指向NULL;给出程序实现,并分析时间复杂度和空间复杂度。
- 一道阿里面试题(js)
- [各种面试题] 完全二叉树节点个数的统计
- 一道阿里多线程面试题的分析与应对
- 一道阿里多线程面试题的分析与应对
- 一道阿里多线程面试题分析
- 一道阿里的面试题
- 阿里2015校招前端方向的一道面试题
- 一道阿里多线程面试题分析
- 阿里最后一道笔试题