算法题
定义二叉树,单个节点的数据结构描述如下:
class Node{
Node left;
Node right;
Node next;
}
在不使用其它数据结构的情况下,按广度优先遍历填充每个节点的next为下一个遍历的节点,为了避免复杂讨论,假设二叉树为满二叉树,若不是满二叉树,也可以通过完善边界条件来实现,思路是一致的。
思路如下(序号不代表执行步骤的顺序,以下仅仅描述对单的节点的操作):
- 对根节点操作:
root.next = root.left; - 除此之外,对于每个节点(包括根节点)做如下操作:
// 对子节点的next赋值为自身,使得访问子节点时可以调用父节点 if (node.left != null) node.left.next = node; if (node.right != null) node.right.next = node; - 对除根节点之外的所有节点:
if (node.equals(node.next.left)){ // 为父节点的左节点的情况 node.next = node.next.right; } else { // 为右节点的情况 node.next = node.next.next.left; // 假设 node.next.next.left 为空,则说明遍历到头 } - 当一个节点完成以上所有操作后,若它的next不为空,则对它的next重复以上操作。
若不是满二叉树,则需要讨论单个节点左节点为空、右节点为空和都为空的情况,以及添加新的对于终点条件的判断。
二叉树广度优先遍历节点填充问题
博客围绕算法题展开,定义了二叉树单个节点的数据结构。要求在不使用其他数据结构时,按广度优先遍历填充每个节点的next为下一个遍历节点,以满二叉树为例说明思路,同时提及非满二叉树需完善边界条件及添加终点条件判断。
1988

被折叠的 条评论
为什么被折叠?



