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

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

意料之中有这题,将之前的思路换一下即可,层序遍历的思路将record(记录下一个循环的次数)手动加减。

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

递归方法也差不多,只要"稍改"一点即可。

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

递归的很容易出错,还是用前面那种方法更好。

相关文章:

  • Deepseek+QuickAPI:打造 MySQL AI 智能体入门篇(一)
  • CVE-2017-5645(使用 docker 搭建)
  • Java面试:集合框架体系
  • 【web逆向】优某愿 字体混淆
  • 提升fcp
  • 八、Prometheus 静态配置(Static Configuration)
  • 仿“东方甄选”直播商城小程序运营平台
  • Git的基本指令
  • 使用爬虫获取自定义API操作API接口
  • 通信协议传输过程中的序列化和反序列化机制
  • 【记】如何理解kotlin中的委托属性?
  • Python的基本知识
  • MySQL学习笔记
  • LSTA: Long Short-Term Attention for Egocentric Action Recognition
  • 【人工智能】【Python】在Scikit-Learn中使用决策树算法(ID3和CART)
  • manim安装
  • 不同路径——1
  • LeetCodeHot100_0x07
  • 2025高频面试算法总结篇【递归回溯动态规划】
  • LabVIEW 线性拟合
  • 俄乌刚谈完美国便筹划与俄乌领导人通话,目的几何?
  • “复旦源”一源六馆焕新启幕,设立文化发展基金首期1亿元
  • “马上涨价”再到“吞下关税”,美政策让沃尔玛“输两次”
  • 网文书单|推荐4本网文,可以当作《绍宋》代餐
  • 舞者王佳俊谈“与AI共舞”:像多了一个舞伴,要考虑它的“感受”
  • 马上评|家长抱婴儿值护学岗,如何避免“被自愿”?