力扣116. 填充每个节点的下一个右侧节点指针(C++,附思路)
题目链接在这里:
116. 填充每个节点的下一个右侧节点指针 - 力扣(LeetCode) (leetcode-cn.com)https://leetcode-cn.com/problems/populating-next-right-pointers-in-each-node/
规定一个 完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:
struct Node {
int val;
Node *left;
Node *right;
Node *next;
}
填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。
初始状态下,所有 next 指针都被设置为 NULL。
进阶:
你只能使用常量级额外空间。
使用递归解题也符合要求,本题中递归程序占用的栈空间不算做额外的空间复杂度。
思路:
按照递归+操作的思路,明确这道题的的解决办法:可以看到这个题有两种连接(操作,递归)方式:
一种是同一双亲的左节点连到它的右节点上;
一种是一个双亲的右节点连到其双亲兄弟的左子节点上。
那么说明在遍历的时候至少要同时得到两个节点才能对其进行操作,而题目里给的函数只有一个节点,则需要再自己写一个函数来完成上述的递归+操作。主函数中只需要做传入新函数的操作即可,具体的事情交给新函数来做。
这个新函数中的操作只需要一句:root1->next=root2;这个函数的使命就是要连接传进来的两个节点,不去管传进来的具体是什么东西,这是由你来决定的。其他的都是遍历语句和空指针处理语句。而递归方式呢?自然就是传入当前两个节点的左右节点,同时注意到第二种连接方式,将第一个结点的右节点和第二个节点的左节点也传进去。(递归的细节不需要理解,只需要知道该如何遍历即可)
/*
// 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){return NULL; }merge(root->left,root->right);return root;}void merge(Node* r1,Node* r2){if(!r1||!r2){return; }r1->next=r2;merge(r1->left,r1->right);merge(r2->left,r2->right);merge(r1->right,r2->left);}
};
力扣116. 填充每个节点的下一个右侧节点指针(C++,附思路)相关推荐
- 力扣 填充每个节点的下一个右侧节点指针
填充每个节点的下一个右侧节点指针 题目描述 给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点.二叉树定义如下: struct Node { int val; Node *left ...
- 2.<tag-二叉树和层序遍历相关题>-lt.116. 填充每个节点的下一个右侧节点指针 + lt.117. 填充每个节点的下一个右侧节点指针 II 1
lt.116. 填充每个节点的下一个右侧节点指针 [案例需求] [思路分析一, 迭代法] [代码实现] /* // Definition for a Node. class Node {public ...
- 116. 填充每个节点的下一个右侧节点指针
2020-05-28 1.题目描述 填充每个节点的下一个右侧节点指针 2.题解 层次遍历即可 3.代码 /* // Definition for a Node. class Node { public ...
- leetcode116. 填充每个节点的下一个右侧节点指针
116. 填充每个节点的下一个右侧节点指针 难度中等128 给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点.二叉树定义如下: struct Node {int val;Node ...
- 二叉树:填充每个节点的下一个右侧节点指针(java)
leetcode116:填充每个节点的下一个右侧节点指针 leetcode原题链接: 题目描述 递归解法一 递归方法二(效率更高) 二叉树专题 leetcode原题链接: 116题:填充每个节点的下一 ...
- [leetcode-117]填充每个节点的下一个右侧节点指针 II
(1 AC) 填充每个节点的下一个右侧节点指针 I是完美二叉树.这个是任意二叉树 给定一个二叉树 struct Node {int val;Node *left;Node *right;Node *n ...
- LeetCode 116. 填充每个节点的下一个右侧节点指针
https://leetcode-cn.com/problems/populating-next-right-pointers-in-each-node/ 难度:中等 给定一个完美二叉树,其所有叶 ...
- LeetCode 116. 填充每个节点的下一个右侧节点指针(递归循环)
文章目录 1. 题目 2. 解题 2.1 递归 2.2 循环 2.3 O(1)空间复杂度 1. 题目 给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点.二叉树定义如下: stru ...
- LeetCode 116. 填充每个节点的下一个右侧节点指针
给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点.二叉树定义如下: struct Node { int val; Node *left; Node *right; Node *n ...
最新文章
- 2015.11.11
- 《解释性机器学习》笔记(五):Rule Fit 规则拟合
- axios拦截器_78.1K 的 Axios 项目有哪些值得借鉴的地方
- how to export many stock data from Wind terminal
- sql判断字段是否为空
- 访问cdrom中的数据 linux
- [神奇的问题啊,GetProcAddress一个不存在的API时,返回非空值,且指向另一个API]谜团解开,错不在GetProcAddress...
- 承载物联之城 阿里云为无锡建设统一物联网基础平台
- aliyun gradle 代理_gradle:现代高效的java构建工具
- 水往地处流,人往地处走
- 境外游导航App选择
- 保角变换法matlab编程,保角变换法.ppt
- 服务器上文件不能重命名,服务器文件重命名
- 谷歌,互联网界的“彩蛋狂魔”
- Blueprint Framemaker介绍
- 中科院计算机所副研究员,中科院计算技术研究所副研究员 谭光明
- Nginx具体配置(三)
- ESP32学习11:PWM
- iOS 设置代理详细步骤
- P2P网贷易遭黑客攻击
热门文章
- 携程apollo系列-个人开发环境搭建
- Spring 笔记
- Linux 下挂载新硬盘方法(转)
- 【扩展欧几里得】Bzoj 1477:青蛙的约会
- [开源应用]利用HTTPHandler+resumableJs+HTML5实现拖拽上传[大]文件
- 【转】博客园中应用LaTex进行公式编写
- UICollectionView 应用
- my footprint :走过的路
- 内存分配(malloc()和free())
- JBoss 系列十四:JBoss7/WildFly如何加载外部的文件或properties文件