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
Initially, all next pointers are set to
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指向它左子节点也就是下一层的最左边节点。
代码:
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; } }
相关文章推荐
- 116. Populating Next Right Pointers in Each Node LeetCode
- LeetCode 116. Populating Next Right Pointers in Each Node
- leetcode 116. Populating Next Right Pointers in Each Node
- LeetCode力扣之116. Populating Next Right Pointers in Each Node
- [leetcode] 116. Populating Next Right Pointers in Each Node
- [leetcode-116]Populating Next Right Pointers in Each Node(c++)
- LeetCode 116 Populating Next Right Pointers in Each Node
- leetcode[116]:Populating Next Right Pointers in Each Node
- LeetCode(116) Populating Next Right Pointers in Each Node
- LeetCode 116: Populating Next Right Pointers in Each Node
- [LeetCode] 116 - Populating Next Right Pointers in Each Node
- leetcode 116 Populating Next Right Pointers in Each Node
- LeetCode: Populating Next Right Pointers in Each Node [116]
- LeetCode 116. Populating Next Right Pointers in Each Node
- LeetCode 116 Populating Next Right Pointers in Each Node
- [leetcode] 116. Populating Next Right Pointers in Each Node 解题报告
- Leetcode-116. Populating Next Right Pointers in Each Node
- LeetCode 116. Populating Next Right Pointers in Each Node
- LeetCode *** 116. Populating Next Right Pointers in Each Node
- Leetcode 116. Populating Next Right Pointers in Each Node (Medium) (cpp)