找完全二叉树最底层最右边的结点
来源:互联网 发布:手机文字游戏制作软件 编辑:程序博客网 时间:2024/04/28 00:57
之前看到的一道题目。想了一下,借助队列用层次遍历。过程
1、把根结点入队列
2、如果队列非空,重复3-4,否则执行5。
3、取出队列头结点,如果它有左子树、右子树,则子树入队列。
4、遍历此结点。
5、结束遍历。
这样做的话,算法复杂度为O(n)。看阿里的一篇面经,说有log(n)算法,在网上搜了一下,总结如下:
一颗二叉树的总结点其实是知道的,设为N。
如上图,总共有15个结点,那么找15号结点只需从根结点开始,向右--向右--向右。
假设只有14个点,那么向右--向右--向左
假设只有13个结点,那么向右---向左---向右
……
……
可以找到规律,总结点数即为最后一个结点,也就是我们要找的结点。把此结点一直除以2,记录其余数。之后根据余数来找。
例如15号结点,一直除以2,余数分别为(15%2)1、(7%2)1、(3%2)1
例如14号结点,一直除以2,余数分别为(14%2)0、(7%2)1、(3%2)1
…………
把这些余数逆序,从根结点开始找,如果是1,则向右,如果是0则向左。
这样算法时间复杂度为log(n)。
0 0
- 找完全二叉树最底层最右边的结点
- 找完全二叉树最底层最右边的结点
- 完全二叉树求最底层最右边的节点
- 如何查找完全二叉树最后一层的最右边的结点
- [算法]给一个满二叉树,求最底层最右边的节点
- LeetCode199 打印树最右边的值
- 完全二叉树的结点数计算
- 完全二叉树的结点总数问题
- 将二叉树的叶子结点转换成单链表,并返回最左叶子结点的地址(链头)
- 将二叉树的叶子结点转换成单链表,并返回最左叶子结点的地址(链头)
- 完全二叉树结点数
- N^N的最右边的数
- 最简单的二叉树
- 最简单的二叉树
- 阶乘最右边的非0位
- N^N 数字的最右边
- Problem F: 最右边的数字
- 完全二叉树指向同一层的相邻结点
- SVN工具的使用 和在Eclipse中安装GPD插件:(多步审批流,因此选择使用工作流(JBPM)来实现)
- Perl之单行命令特技
- ------------------java正则表达式验证邮箱、手机号码
- PHP 基础知识 (一)
- 我怀念的
- 找完全二叉树最底层最右边的结点
- POJ 1715(组合数学)
- Qt中的坐标变换
- ubuntu14.04初体会
- HDU 2036 改革春风吹满地(求多边形面积)
- Ext JS With ASP.NET MVC Sample(1)
- C#学习笔记2
- 个人魅力
- 19、DNS的概念,用途,DNS查询的实现算法