当前位置: 首页 > article >正文

leetcode日记(100)填充每个节点的下一个右侧节点指针

和层序遍历差不多的思路,将节点储存在队列里,一边取出节点一边放入取出节点的左右节点,直到队列空。

/*
// 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) {
        if(root==NULL) return root;
        int record=1;
        queue<Node*> n;
        n.push(root);
        while(!n.empty()){
            Node* node=NULL;
            for(int i=0;i<record;i++){
                Node* first=n.front();
                if(first->left){
                    n.push(first->left);
                    n.push(first->right);
                }
                if(node) node->next=first;
                node=first;
                n.pop();
            }
            record*=2;
        }
        return root;
    }
};

本来我是写的vector,但是发现queue更好,完美匹配。

以及看了答案发现还有一种很机智的思路。

大概就是next有两种取法(对于root和其left、right),一种是left的next为right,一种是right的next为root的next的left。

如此就可以递归。

/*
// 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* result=root;
        while(root){
            Node* record=root->left;
            while(root&&root->left){
                root->left->next=root->right;
                if(root->next) root->right->next=root->next->left;
                root=root->next;
            }
            root=record;
        }
        return result;
    }
};


http://www.kler.cn/a/592917.html

相关文章:

  • Vue3中ts父子组件传值
  • CSGHub开源版本v1.5.0更新
  • Leetcode-100 回溯法-子集
  • 单元测试、系统测试、集成测试、回归测试的步骤、优点、缺点、注意点梳理说明
  • 【深度学习量化交易18】盘前盘后回调机制设计与实现——基于miniQMT的量化交易回测系统开发实记
  • Leetcode 刷题笔记1 单调栈part01
  • 瑞幸需要宇树科技
  • 使用hel-micro微服务实现在jsp项目中引入react组件
  • Jenkins自动化部署pigx项目的实践总结
  • DLMS电能表通讯协议学习笔记
  • 2025三掌柜赠书活动第八期:预训练语言模型:方法、实践与应用
  • 联核科技AGV无人叉车有哪些常见的安全防护措施?
  • Flutter小白零基础入门到高级项目实战全集
  • 解决uni-app授权弹框华为审核拒绝
  • vscode+wsl2+bear+clangd配置教程
  • 【Spark】查询优化中分区(Partitioning)和分桶(Bucketing)是什么关系?什么时候应当分区,什么时候应当分桶?
  • 【sgAutocomplete_v2】自定义组件:基于elementUI的el-input组件开发的搜索输入框(支持本地保存历史搜索关键词、后台获取匹配项)
  • flutter 专题 九十 四 Flutter开发之基础知识
  • xss注入实验(xss-lab)
  • 4.1-1 IS-NET-Pro视频转图片的插件