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

Leetcode 116. Populating Next Right Pointers in Each Node

2018-02-08 09:13 309 查看
原题:
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
解决方法:
如果没有空间复杂度的要求,这道题可以用queue来解决。由于空间复杂度的限制,我们只能用指针的辅助来进行:
- root指向的是上一层节点的最左边节点,root->next其实指向的就是它的右边节点
- 每一次循环,我们都处理他的子节点的那一层:它的左子节点的next指向右子节点,如果它有右边节点,就将它的右子节点的next指向它右边节点的左子节点。如此直到整个一行处理完毕。
- 然后将root指向它左子节点也就是下一层的最左边节点。

代码:
void connect(TreeLinkNode *root) {
if (!root)
return;
root->next = NULL;
while(root->left){
TreeLinkNode* cur = root;
while(cur){
cur->left->next = cur->right;
if (cur->next)
cur->right->next =cur->next->left;

cur = cur->next;
}

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