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

[LeetCode]Populating Next Right Pointers in Each Node

2014-04-08 21:15 148 查看

题目:


Populating Next Right Pointers in Each Node

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


来源:http://oj.leetcode.com/problems/populating-next-right-pointers-in-each-node/

思路:

C++ AC代码:

/**
* Definition for binary tree with next pointer.
* struct TreeLinkNode {
*  int val;
*  TreeLinkNode *left, *right, *next;
*  TreeLinkNode(int x) : val(x), left(NULL), right(NULL), next(NULL) {}
* };
*/
class Solution {
public:
void connect(TreeLinkNode *root) {
if ( root == NULL || root->left == NULL || root->right == NULL)
return ;
TreeLinkNode *p =root ;
while  ( p!= NULL){
p->left->next = p->right ;
if ( p->next)
p->right->next =p->next->left;
p = p->next;
}
connect(root->left);
}
};


在网上看到另外两种解法:

//http://blog.csdn.net/njust_ecjtu/article/details/16361151

void connect(TreeLinkNode *root) {
// IMPORTANT: Please reset any member data you declared, as
// the same Solution instance will be reused for each test case.

if(root == NULL) return ;

TreeLinkNode *left,*right;
left = root->left;
right = root->right;

while(left&&right)//将俩子树间的空隙链接起来---》关键所在
{
left->next = right;

left = left->right;//走向下一层
right = right->left;
}

connect(root->left);//遍历左边
connect(root->right);//遍历右边

}


public:
void connect(TreeLinkNode *root) {
connect(root, NULL);
}
private:
void connect(TreeLinkNode *root, TreeLinkNode *sibling) {
if (root == nullptr)
return;
else
root->next = sibling;

connect(root->left, root->right);
if (sibling)
connect(root->right, sibling->left);
else
connect(root->right, nullptr);
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: