给定一个二叉树
struct TreeLinkNode {
TreeLinkNode *left;
TreeLinkNode *right;
TreeLinkNode *next;
}
填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL
。
初始状态下,所有 next 指针都被设置为 NULL
。
说明:
- 你只能使用额外常数空间。
- 使用递归解题也符合要求,本题中递归程序占用的栈空间不算做额外的空间复杂度。
示例:
给定二叉树,
1
/
2 3
/
4 5 7
调用你的函数后,该二叉树变为:
1 -> NULL
/
2 -> 3 -> NULL
/
4-> 5 -> 7 -> NULL
这里要求额外的空闲复杂度是常数项的,所以我们这里考虑用俩引用来解决!
定义一个queue引用,该引用一般指向同一层各个节点,cur引用一般代表的是queue引用的子节点,level引用一般代表的是同一层节点的起始节点,这个引用一般指向的对象不会变
代码如下:
public class LeetCode117 { public static class TreeLinkNode { int val; TreeLinkNode left; TreeLinkNode right; TreeLinkNode next; TreeLinkNode(int x) { val = x; } } public void connect(TreeLinkNode root) { TreeLinkNode queue = root; TreeLinkNode level = new TreeLinkNode(0); while (queue != null) { level.next = null; TreeLinkNode cur = level; while (queue != null) { if (queue.left != null) { cur.next = queue.left; cur = cur.next; } if (queue.right != null) { cur.next = queue.right; cur = cur.next; } queue = queue.next; } queue = level.next; } } }