t***n 发帖数: 183 | 1 给定一个结构完美的二叉树,类似这样的
1
3 2
7 6 5 4
15 14 13 12 11 10 9 8
如何按层先找到两边的元素,满足一定条件后在iterate它们之间的每一个元素
第二层,找到 3 和 2
第二层,找到7 和 4
第三层, 找到15 和 8
然后我想iterate 14,13, 12, 11, 10, 9
有什么可行的算法吗?
谢谢 |
o*******r 发帖数: 73 | 2 题目的意思没看太明白,如果知道一层的最左边和最右边,想遍历那一层的话感觉把二
叉树里加一个next 指针就可以。 |
d*******n 发帖数: 43 | 3 既然是完美二叉树 编号放到map里
要什么给什么
【在 t***n 的大作中提到】 : 给定一个结构完美的二叉树,类似这样的 : 1 : 3 2 : 7 6 5 4 : 15 14 13 12 11 10 9 8 : 如何按层先找到两边的元素,满足一定条件后在iterate它们之间的每一个元素 : 第二层,找到 3 和 2 : 第二层,找到7 和 4 : 第三层, 找到15 和 8 : 然后我想iterate 14,13, 12, 11, 10, 9
|
J*****4 发帖数: 1 | 4 1 初始定义一个计数器count =0 ,先将root的左结点推入队列q,然后将root右极点推
入队列。
2 从q中取一个节点,放入数组或print,如果count是偶数,将此节点的左节点推入队
列,如果count是奇数则将此节点的右节点推入队列。count 加1.
3 不断循环第2步,直到队列为空。
这样可以依次打印每层最两头的元素。 根据条件再打印中间的没看懂什么意思。
解法2
直接bfs. 顺序得到所有 n个元素。另外在bfs的同时把每个元素的层级level信息存在
一个长度为n的数组level。
然后对这个n个元素的数组进行二次处理,相邻两个元素的level如果不同,则为上一层
的尾元素和下一层首元素,单独组合出来数组1,其他的元素也单独组合出来数组2。 |
J*****4 发帖数: 1 | 5 完美二叉数的话,bfs出来后的数组,直接根据公式 i的左孩子是2i加1 ,右节点是2i
加2 直接选出来了,这样更简单了。 |
d*****t 发帖数: 28 | 6 "按层先找到两边的元素,满足一定条件后在iterate它们之间的每一个元素"
这个事情本身太二了,没有意义。
应该分成3件事来做:取最左支序列,取最右支,层序遍历
每一件都是trivial effort
【在 t***n 的大作中提到】 : 给定一个结构完美的二叉树,类似这样的 : 1 : 3 2 : 7 6 5 4 : 15 14 13 12 11 10 9 8 : 如何按层先找到两边的元素,满足一定条件后在iterate它们之间的每一个元素 : 第二层,找到 3 和 2 : 第二层,找到7 和 4 : 第三层, 找到15 和 8 : 然后我想iterate 14,13, 12, 11, 10, 9
|