# 【Leetcode】Populating Next Right Pointers in Each Node II

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,

         1
/  \
2    3
/ \    \
4   5    7


After calling your function, the tree should look like:

         1 -> NULL
/  \
2 -> 3 -> NULL
/ \    \
4-> 5 -> 7 -> NULL


1、用"Populating Next Right Pointers in Each Node".的算法，仍然有效，只是空间复杂度是O(n)

	public void connect(TreeLinkNode root) {
for (List<TreeLinkNode> list : lists) {
for (int i = 0; i < list.size() - 1; i++) {
list.get(i).next = list.get(i + 1);
}
list.get(list.size() - 1).next = null;
}
}

/**
* 统计每层节点
*/
int height = heightTree(root);
for (int i = 1; i <= height; i++) {
list = kLevelNumber(root, 1, list, i);
}
return lists;
}

/***
* kk是目标层数，height是当前遍历结点高度
*/
if (p != null) {
if (height == kk) {
}
list = kLevelNumber(p.left, height + 1, list, kk);
list = kLevelNumber(p.right, height + 1, list, kk);
}
return list;
}

if (p == null)
return 0;
int h1 = heightTree(p.left);
int h2 = heightTree(p.right);
return h1 > h2 ? h1 + 1 : h2 + 1;
}


04-12 1.1万

03-30 1587

11-21 3577

04-13 9262

10-02 642

02-05 1250

11-14 913

05-10 262

04-07 327