题目大意:填充二叉树每一个节点的下一个右侧节点指针
分析:类似116,但是由于不是完美二叉树,所以考虑的情况要更多。
情况一:首先要考虑leftmost指针不再单纯指向第n层最左节点,而是指向第n+1层队首节点的父亲。这样从leftmost开始遍历第n层才符合题意。
情况二:连接节点不再像116那样分两种,而是直接维护当前所要填充的节点。
代码:
/*
// 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) {
Node *leftmost = root;
while(leftmost != NULL){
// 获取leftmost
// 不一定是该层最左,因为leftmost实指下一层的队首元素的父节点
// 从leftmost开始遍历,连接它的下一层节点
while(leftmost && leftmost->lef