前言
今天上午从9点半开始就做了这么一道题目,还是挺有意思的,这里记录一下
题目
Follow up for problem "Populating Next Right Pointers in Each Node".
What if the given tree could be any binary tree? Would your previous solution still work?
Note:
You may only use constant extra space.
For example,
Given the following binary tree,
What if the given tree could be any binary tree? Would your previous solution still work?
Note:
You may only use constant extra space.
For example,
Given the following binary tree,
After calling your function, the tree should look like:
思路
之前也做过一道类似的题目,但是有比较明显的区别,区别在于:每个节点的next节点可以在横向上找到存在的那个节点,无论是父节点next节点的左或者右孩子,又或者是父节点next的next节点的左或者右节点。。。
因此,这道题目首要是找到右孩子的第一个有效的next链接节点,然后再处理左孩子。然后依次递归处理右孩子,左孩子
代码
/**
* Definition for binary tree with next pointer.
* public class TreeLinkNode {
* int val;
* TreeLinkNode left, right, next;
* TreeLinkNode(int x) { val = x; }
* }
*/
public class Solution {
public void connect(TreeLinkNode root) {
// Note: The Solution object is instantiated only once and is reused by each test case.
if (root == null) {
return;
}
TreeLinkNode p = root.next;
while (p != null) {
if (p.left != null) {
p = p.left;
break;
}
if (p.right != null) {
p = p.right;
break;
}
p = p.next;
}
if (root.right != null) {
root.right.next = p;
}
if (root.left != null) {
root.left.next = root.right == null ? p : root.right;
}
connect(root.right);
connect(root.left);
}
}
记录
凭借AC这道题目,在LeetCode OJ上ac数目达到50了,截图纪念一下