Populating Next Right Pointers in Each Node II解题分享
2014-08-20 14:31
253 查看
原题:https://oj.leetcode.com/problems/populating-next-right-pointers-in-each-node-ii/
注:本文解题过程参考了此篇文章:http://www.cnblogs.com/x1957/p/3521212.html
个人数据结构基本不算扎实,涉及一些基本的层序遍历、深度优先遍历等不够熟练,在解决此问题的时候略微吃力,查了很多文章都有解决办法但或由于思路的表达不够清晰或个人理解能力较差 ,导致看了代码都不知所云,另外网上多数解法是用C++实现,java相对较少。在此把个人认为比较好理解的思路整理一下同时提供java代码:
解题思路重点难点:
1)一行一行处理(废话,但是还得说)
2)每次处理的行(指处理next指针),是当前行(代码中parent所指向的行)的下一行,当前行(parent)每个节点的next被认为已经处理好了
3)每次处理的行(指处理next指针),用一个节点current保存当前处理到的节点:对于上一层(parent层)的每个新节点(从左到右),如果它有left,那么就current.next-left,然后current = left(当然如果这个left是这一行的第一个节点直接current=left,通过current==null判断);如果它有right,那么就current-next = right, 然后current=right(同left所述),当前的left和right处理完后,parent=parent.next继续处理parent层下一个节点的子节点。
4)处理过程中碰到parent下一行的最左边的节点,保存在nextLine里,这样处理完当前行之后,可以继续处理下一行
AC代码:
public class PopulatingNextRightPointersInEachNodeII {
public void connect(TreeLinkNode root) {
if(root == null) return;
TreeLinkNode parent = root;
TreeLinkNode nextLineStartNode;
TreeLinkNode current;
while(parent != null) {
nextLineStartNode = null;
current = null;
//处理的是<span style="font-family: Arial, Helvetica, sans-serif;">parent </span><span style="font-family: Arial, Helvetica, sans-serif;">的下一行</span>
while(parent != null) {
if(nextLineStartNode == null) { //保存operate下一行的最左边节点到在nextLine里,此处是一个难点和重点
nextLineStartNode = parent.left != null?parent.left:parent.right;
}
if(parent.left != null) {
if(current != null) {
current.next = parent.left;
}
current = parent.left;
}
if(parent.right != null) {
if(current != null) {
current.next = parent.right;
}
current = parent.right;
}
parent = parent.next;
}
parent = nextLineStartNode;
}
}
}
注:本文解题过程参考了此篇文章:http://www.cnblogs.com/x1957/p/3521212.html
个人数据结构基本不算扎实,涉及一些基本的层序遍历、深度优先遍历等不够熟练,在解决此问题的时候略微吃力,查了很多文章都有解决办法但或由于思路的表达不够清晰或个人理解能力较差 ,导致看了代码都不知所云,另外网上多数解法是用C++实现,java相对较少。在此把个人认为比较好理解的思路整理一下同时提供java代码:
解题思路重点难点:
1)一行一行处理(废话,但是还得说)
2)每次处理的行(指处理next指针),是当前行(代码中parent所指向的行)的下一行,当前行(parent)每个节点的next被认为已经处理好了
3)每次处理的行(指处理next指针),用一个节点current保存当前处理到的节点:对于上一层(parent层)的每个新节点(从左到右),如果它有left,那么就current.next-left,然后current = left(当然如果这个left是这一行的第一个节点直接current=left,通过current==null判断);如果它有right,那么就current-next = right, 然后current=right(同left所述),当前的left和right处理完后,parent=parent.next继续处理parent层下一个节点的子节点。
4)处理过程中碰到parent下一行的最左边的节点,保存在nextLine里,这样处理完当前行之后,可以继续处理下一行
AC代码:
public class PopulatingNextRightPointersInEachNodeII {
public void connect(TreeLinkNode root) {
if(root == null) return;
TreeLinkNode parent = root;
TreeLinkNode nextLineStartNode;
TreeLinkNode current;
while(parent != null) {
nextLineStartNode = null;
current = null;
//处理的是<span style="font-family: Arial, Helvetica, sans-serif;">parent </span><span style="font-family: Arial, Helvetica, sans-serif;">的下一行</span>
while(parent != null) {
if(nextLineStartNode == null) { //保存operate下一行的最左边节点到在nextLine里,此处是一个难点和重点
nextLineStartNode = parent.left != null?parent.left:parent.right;
}
if(parent.left != null) {
if(current != null) {
current.next = parent.left;
}
current = parent.left;
}
if(parent.right != null) {
if(current != null) {
current.next = parent.right;
}
current = parent.right;
}
parent = parent.next;
}
parent = nextLineStartNode;
}
}
}
相关文章推荐
- [LeetCode] Populating Next Right Pointers in Each Node II 解题报告
- [LeetCode]Populating Next Right Pointers in Each Node II, 解题报告
- [LeetCode] Populating Next Right Pointers in Each Node II 解题报告
- leecode 解题总结:117. Populating Next Right Pointers in Each Node II
- LeetCode: Populating Next Right Pointers in Each Node II 解题报告
- leetcode 79: Populating Next Right Pointers in Each Node II
- Populating Next Right Pointers in Each Node II
- Populating Next Right Pointers in Each Node II
- Populating Next Right Pointers in Each Node II
- Populating Next Right Pointers in Each Node II
- LeetCode: Populating Next Right Pointers in Each Node II
- leetcode 79: Populating Next Right Pointers in Each Node II
- LeetCode(Oct28'12):Populating Next Right Pointers in Each Node II
- Populating Next Right Pointers in Each Node II
- LeetCode_Populating Next Right Pointers in Each Node II
- 【leetcode】Populating Next Right Pointers in Each Node II
- 按层空间复杂度Populating Next Right Pointers in Each Node II
- 【ATT】Populating Next Right Pointers in Each Node II
- [Leetcode]Populating Next Right Pointers in Each Node II
- [LeetCode] Populating Next Right Pointers in Each Node II