首页 > 编程语言 >11.11算法

11.11算法

时间:2023-11-11 12:45:50浏览次数:34  
标签:Node right next 算法 11.11 root 节点 left

题目

填充每个节点的下一个右侧节点指针
给定一个 完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:

struct Node {
int val;
Node *left;
Node *right;
Node *next;
}
填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。

初始状态下,所有 next 指针都被设置为 NULL。

示例 1:

输入:root = [1,2,3,4,5,6,7]
输出:[1,#,2,3,#,4,5,6,7,#]
解释:给定二叉树如图 A 所示,你的函数应该填充它的每个 next 指针,以指向其下一个右侧节点,如图 B 所示。序列化的输出按层序遍历排列,同一层节点由 next 指针连接,'#' 标志着每一层的结束。
示例 2:

输入:root = []
输出:[]

提示:

树中节点的数量在 [0, 212 - 1] 范围内
-1000 <= node.val <= 1000

进阶:

你只能使用常量级额外空间。
使用递归解题也符合要求,本题中递归程序占用的栈空间不算做额外的空间复杂度。

解答:

/*
// 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 == nullptr){
return root;
}
if(root->left !=nullptr){
root->left->next = root->right;
}
if(root->right !=nullptr && root->next != nullptr){
root->right->next = root->next->left;
}
connect(root->left);
connect(root->right);
return root;
}
};

关键

递归去想一个节点,就可以扩展到所有节点解决问题

标签:Node,right,next,算法,11.11,root,节点,left
From: https://www.cnblogs.com/minipython-wldx/p/17825786.html

相关文章

  • 【学习笔记】随机化算法
    例题P7831[COCI2009-2010#3]PATULJCI题解首先对每个颜色开一个vector<int>保存其位置,随后对于一段区间\([l,r]\)和一个颜色\(c\),可以很快速的求出\([l,r]\)内\(c\)出现的次数。然后进行随机化,每次随机一个元素并查看他的出现次数。若随机\(t\)次,那么随机不到的概率是\(\frac......
  • Vue源码学习(十六):diff算法(三)暴力比对
    好家伙,这是diff的最后一节了 0.暴力比对的使用场景 没有可复用的节点:当新旧虚拟DOM的结构完全不同,或者某个节点不能被复用时,需要通过暴力比对来创建新的节点,并在真实DOM上进行相应的插入操作。0.1.例子一://创建vnodeletvm1=newVue({data:{name:'张三'......
  • 回溯算法
    回溯算法处理5w条数据优化❓:我想根据当前节点id回溯出他的路径层级扁平数组......
  • LRU算法 C++
    #pragmaonce#include<list>#include<unordered_map>usingnamespacestd;classLRUCache{public:LRUCache(intcapacity):cap(capacity){m.reserve(capacity);m.max_load_factor(0.75);}intget(intkey)......
  • opencv多目标跟踪算法报错与解决方案
    背景:在正确安装opencv-contrib-python4.8.1.78后,在使用opencv进行多目标跟踪时,出现如下错误:错误及解决方法1、AttributeError:module'cv2.cv2'hasnoattribute'MultiTracker_create'解决方法:将trackers=cv2.MultiTracker_create()改成trackers=cv2.legacy.Mu......
  • 社区街道治安智慧监管方案,AI算法赋能城市基层精细化治理
    一、背景需求分析随着城市建设进程的加快,城市的管理也面临越来越多的挑战。例如,在城市街道的管理场景中,机动车与非机动车违停现象频发、摊贩占道经营影响交通、街道垃圾堆积影响市容市貌等等,都成为社区和街道的管理难点。这些现象不仅存在严重的安全隐患,同时也影响了城市的市容管理......
  • Java实现两字符串相似度算法
    1、编辑距离编辑距离:是衡量两个字符串之间差异的度量,它表示将一个字符串转换为另一个字符串所需的最少编辑操作次数(插入、删除、替换)。2、相似度计算方法可以有多种,其中一种常见的方法是将编辑距离归一化为0到1之间的范围(归一化编辑距离(NormalizedEditDistance)),将编辑距离除以......
  • 工程车识别AI视觉算法方案
    工程车识别AI视觉算法方案https://mp.weixin.qq.com/s/jXXTZCcFNrZUtpzVyQ4wCg工程车识别AI视觉算法方案原创 郭桂珊刘洲 OPENAIStore 2023-10-2514:14 发表于广东收录于合集#智慧交通5个#算法20个#ai20个工程车识别算法主要用于城市道路、建筑工地等有禁止......
  • 【算法题】吃糖问题
    题干:一个人一次可以吃1颗糖,也可以吃2颗糖,也可以同时吃下n颗糖。求这个人吃完n颗糖有多少种方式。functionfindWayEatSugarNumber(n){constwayArr=findWayEatSugar(n);constreturnArr=wayArr.map((ele)=>ele.sort()).map((ele)=>ele.join());......
  • 算法
    二叉树二叉树结点的定义structTreeNode{ intval; TreeNode*left; TreeNode*right; TreeNode(intx):val(x),left(nullptr),right(nullptr){}};//分号记得有关二叉树的一些概念根节点:位于二叉树顶层的节点,没有父节点。叶节点:没有子节点,两个左右子节点的......