二叉树——116. 填充每个节点的下一个右侧节点指针

二叉树——116. 填充每个节点的下一个右侧节点指针

题目:

示例:

思路:

这个题还是要贯彻二叉树的解题思路:要明白需要对结点进行什么操作,还有就是要确定遍历顺序

本题显而易见就是让做结点指向右节点,但是这并不是全部,从示例可以看出对于父节点相同的情况是左子节点指向右子节点,但是对于父节点不相同的情况,这种操作就不适用了。

接下来就是针对跨越父节点的情况,思考一下应该怎么操作,即node->right->next = node->next->left

至于遍历顺序,肯定是我们先对中间结点操作,然后递归左,再是递归右,是很显而易见的前序遍历。

代码:

class Solution {
public:
    Node* connect(Node* root) {
        if(root == NULL) return nullptr;
        connect2Node(root);
        return root;
    }

    void connect2Node(Node* node){
        if(node->left){
            /**前序遍历**/
            // 相同父节点时的操作
            node->left->next = node->right;
            // 跨越不同父节点的操作
            if(node->next) node->right->next = node->next->left;
            connect2Node(node->left);       // 左
            connect2Node(node->right);      // 右
        }
    }
};

Rank:

posted @ 2021-03-22 13:19  Originhhh  阅读(33)  评论(0)    收藏  举报