Q116. Populating Next Right Pointers in Each Node
直达: https://leetcode.com/problems/populating-next-right-pointers-in-each-node/description/
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 toNULL
.
Initially, all next pointers are set toNULL
.
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
分析
对于完美的二叉树来说,左子树的next为其父节点的右子树,右节点的next是其root->next的左子树,依照此规律,递归的构建即可。
C++代码
/**
* 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) return;
if(root->left) root->left->next = root->right;
if(root->right && root->next) root->right->next = root->next->left;
connect(root->left);
connect(root->right);
}
};
PreviousQ114. Flatten Binary Tree to Linked ListNextQ117. Populating Next Right Pointers in Each Node II
Last updated
Was this helpful?