LeetCode 116. 填充每个节点的下一个右侧节点指针
LeetCode 116. 填充每个节点的下一个右侧节点指针
题目
给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:
struct Node {
int val;
Node *left;
Node *right;
Node *next;
}
填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。
初始状态下,所有 next 指针都被设置为 NULL。
示例:
输入:{“KaTeX parse error: Expected '}', got 'EOF' at end of input: …":"1","left":{"id”:“2”,“left”:{“KaTeX parse error: Expected 'EOF', got '}' at position 53: …t":null,"val":4}̲,"next":null,"r…id”:“4”,“left”:null,“next”:null,“right”:null,“val”:5},“val”:2},“next”:null,“right”:{“KaTeX parse error: Expected '}', got 'EOF' at end of input: …":"5","left":{"id”:“6”,“left”:null,“next”:null,“right”:null,“val”:6},“next”:null,“right”:{"$id":“7”,“left”:null,“next”:null,“right”:null,“val”:7},“val”:3},“val”:1}
输出:{“KaTeX parse error: Expected '}', got 'EOF' at end of input: …":"1","left":{"id”:“2”,“left”:{“KaTeX parse error: Expected '}', got 'EOF' at end of input: …:null,"next":{"id”:“4”,“left”:null,“next”:{“KaTeX parse error: Expected '}', got 'EOF' at end of input: …:null,"next":{"id”:“6”,“left”:null,“next”:null,“right”:null,“val”:7},“right”:null,“val”:6},“right”:null,“val”:5},“right”:null,“val”:4},“next”:{“KaTeX parse error: Expected '}', got 'EOF' at end of input: …":"7","left":{"ref”:“5”},“next”:null,“right”:{“KaTeX parse error: Expected 'EOF', got '}' at position 9: ref":"6"}̲,"val":3},"righ…ref”:“4”},“val”:2},“next”:null,“right”:{"$ref":“7”},“val”:1}
解释:给定二叉树如图 A 所示,你的函数应该填充它的每个 next 指针,以指向其下一个右侧节点,如图 B 所示。
分析
递归处理,对于每个结点,以他画一条线,把这条线左右两边的结点都接起来就行了。
C++代码
/* // Definition for a Node. class Node { public: int val; Node* left; Node* right; Node* next; Node() : val(0), left(NULL), right(NULL), next(NULL) {} Node(int _val) : val(_val), left(NULL), right(NULL), next(NULL) {} Node(int _val, Node* _left, Node* _right, Node* _next) : val(_val), left(_left), right(_right), next(_next) {} }; */ class Solution { public: Node* connect(Node* root) { helper(root); return root; } void helper(Node* root){ if(!root){ return; } Node* temp_left; Node* temp_right; if(root->left != NULL){ temp_left = root->left; temp_right = root->right; root->left->next = root->right; helper(root->left); helper(root->right); }else{ return; } while(temp_left->right != NULL){ temp_left = temp_left->right; temp_right = temp_right->left; temp_left->next = temp_right; } } };
- 点赞
- 收藏
- 分享
- 文章举报
- Leetcode 116. 填充每个节点的下一个右侧节点指针
- LeetCode 116. 填充每个节点的下一个右侧节点指针
- Leetcode 117. 填充每个节点的下一个右侧节点指针 II
- 利用python 完成leetcode 116 填充每个节点的下一个右侧节点指针
- LeetCode 117. 填充每个节点的下一个右侧节点指针 II
- LeetCode 117. 填充每个节点的下一个右侧节点指针 II
- 利用python 完成leetcode 117 填充每个节点的下一个右侧节点指针 II
- leetcode-116-填充每个节点的下一个右侧节点指针
- LeetCode 117. 填充每个节点的下一个右侧节点指针 II
- leetcode 填充每个节点的下一个右侧节点指针
- 116填充每个节点的下一个右侧节点指针
- 填充每个节点的下一个右侧节点指针
- 填充每个节点的下一个右侧节点指针
- 填充每个节点的下一个右侧节点指针
- 填充每个节点的下一个右侧节点指针
- 117填充每个节点的下一个右侧节点指针 II
- 填充每个节点的下一个右侧节点指针
- [Leetcode] Populating next right pointer in each node 填充每个节点的右指针
- 跟进问题“在每个节点中填充下一个正确的指针”。层次遍历二叉树
- 【二叉树的递归】06填充每个节点中的下一个正确的指针【Populating Next Right Pointers in Each Node】