您的位置:首页 > Web前端 > Node.js

116. Populating Next Right Pointers in Each Node

2017-05-24 19:46 375 查看
Given a binary tree
struct TreeLinkNode {
TreeLinkNode *left;
TreeLinkNode *right;
TreeLinkNode *next;
}


Populate each next pointer to point to its next right node. If there is no next right node, the next pointer should be set to
NULL
.

Initially, all next pointers are set to
NULL
.

Note:

You may only use constant extra space.

You may assume that it is a perfect binary tree (ie, all leaves are at the same level, and every parent has two children).

For example,

Given the following perfect binary tree,

1
/ \
2 3
/ \ / \
4 5 6 7


After calling your function, the tree should look like:

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


思路:

定义了三个指针,first、pre、current。

first 指向每一行的起始位置

pre 指向父节点

current 指向当前节点



根据current和pre的关系,可以做出如下判断:

1. current == pre.left 则直接让current.next = pre.right

2. current == pre.right 可以分为两种情况:

(1) pre.next == NULL

例如:当pre指向1并且current指向3时,1的next为NULL,此时fisrt、pre均下移到2、3那一行。

(2) pre.next != NULL

例如:当pre指向2并且current指向5时,此时5的next应指向6

根据上述的思路,程序如下:

/**
* 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) {
if(root == null) return ;
TreeLinkNode pre = root;
TreeLinkNode current = pre.left;
TreeLinkNode first = root;
while(current != null) {
if(current == pre.left) {
current.next = pre.right;
}else if(current == pre.right) {
if(pre.next != null) {
current.next = pre.next.left;
pre = pre.next;
}else {
first = first.left;
pre = first;
current = pre.left;
continue;
}
}
current = current.next;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: