给定一个二叉树
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;
}
}
}