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

333人阅读 评论(0)

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) {
List<List<TreeLinkNode>> lists = levelOrder(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是当前遍历结点高度
*/
public List<TreeLinkNode> kLevelNumber(TreeLinkNode p, int height, List<TreeLinkNode> list, int kk) {
if (p != null) {
if (height == kk) {
}
list = kLevelNumber(p.left, height + 1, list, kk);
list = kLevelNumber(p.right, height + 1, list, kk);
}
return list;
}

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


个人资料
等级：
访问量： 57万+
积分： 8682
排名： 2735
博客专栏
 Leetcode题解java版 文章：289篇 阅读：494700
最新评论