题目链接

https://leetcode-cn.com/problems/populating-next-right-pointers-in-each-node-ii/

题目大意

给定一个二叉树

struct Node {

int val;

Node *left;

Node *right;

Node *next;

}

填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。

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

进阶:

你只能使用常量级额外空间。

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

给一颗二叉树,要求每个节点与最右边的节点相连接,注意区别:这题和116题意思不太相同,116题还可以保证每个节点的左右子树都存在(除非叶子节点)。

其次,本题难点还在于要求常数的内存空间,这就排除了使用队列进行层次遍历的做法

最后,本题对于递归遍历的顺序还有要求:即需要先遍历右子树,再遍历左子树



在这幅图中,如果先遍历左子树,再遍历右子树,那么从9---1之间的指针在遍历以2为根节点的左子树时没有被连接,这样会造成以7为根节点的右子树0,无法找到右边相邻的8

//本题将条件限制为 二叉树
//与116题注意区分,不一定左子树存在
//注意递归左右子树的区别 class Solution {
public:
Node *getnext(Node *root){
if(!root) return root;
if(root->left) return root->left;
if(root->right) return root->right; return getnext(root->next);
} Node* connect(Node* root) {
if(!root) return root;
if(root->left && root->right) root->left->next=root->right;
if(root->left && !root->right) root->left->next=getnext(root->next);
if(root->right) root->right->next=getnext(root->next); //无论左子树是否为空,均需要找到相邻的右子树
// if(!root->left && root->right) root->right->next=getnext(root->next); connect(root->right);
connect(root->left);
return root;
}
}

初次的做法:

 Node* connect(Node* root) {//注意需要判空 节点位置的信息可能为空
//怎么维护左边起的第二个节点??
// if(!root || !root->left) return root;
if(!root) return root;
if(root->left){
Node *tmp=NULL, *start=root;
if(start->right) tmp=start->right;
else{
while(start->next){
if(start->next->left) {
tmp=start->next->left;
break;
}
else if(start->next->right){
tmp=start->next->right;
break;
}
else{
start=start->next;
}
}
}
root->left->next=tmp;
} if(root->next){
if(root->right){
if(root->next->left)
root->right->next=root->next->left;
else
root->right->next=root->next->right;
}
} connect(root->right);
connect(root->left);
return root;
}

leetcode 117. 填充每个节点的下一个右侧节点指针 II(二叉树,DFS)的更多相关文章

  1. Java实现 LeetCode 117 填充每个节点的下一个右侧节点指针 II(二)

    117. 填充每个节点的下一个右侧节点指针 II 给定一个二叉树 struct Node { int val; Node *left; Node *right; Node *next; } 填充它的每 ...

  2. [LeetCode] 116. 填充每个节点的下一个右侧节点指针

    题目链接 : https://leetcode-cn.com/problems/populating-next-right-pointers-in-each-node/ 题目描述: 给定一个完美二叉树 ...

  3. Java实现 LeetCode 116 填充每个节点的下一个右侧节点指针

    116. 填充每个节点的下一个右侧节点指针 给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点.二叉树定义如下: struct Node { int val; Node *left ...

  4. [leetcode-117]填充每个节点的下一个右侧节点指针 II

    (1 AC) 填充每个节点的下一个右侧节点指针 I是完美二叉树.这个是任意二叉树 给定一个二叉树 struct Node { int val; Node *left; Node *right; Nod ...

  5. LeetCode OJ:Populating Next Right Pointers in Each Node II(指出每一个节点的下一个右侧节点II)

    Follow up for problem "Populating Next Right Pointers in Each Node". What if the given tre ...

  6. 【LeetCode】116. 填充每个节点的下一个右侧节点指针 Populating Next Right Pointers in Each Node 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 递归 日期 题目地址:https://leetcode ...

  7. 117. 填充每个节点的下一个右侧节点指针 II

    Q: 给定一个二叉树 struct Node { int val; Node *left; Node *right; Node *next; } 填充它的每个 next 指针,让这个指针指向其下一个右 ...

  8. leetcode117. 填充每个节点的下一个右侧节点指针 II

    给定一个二叉树struct Node {  int val;  Node *left;  Node *right;  Node *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节 ...

  9. leetcode 116填充每个节点的下一个右侧节点指针

    time O(n) ,sapce O(n) /* // Definition for a Node. class Node { public: int val; Node* left; Node* r ...

随机推荐

  1. 【Jmeter 压测MySql连接问题】

    JDBC Request :Cannot load JDBC driver class 'com.mysql.jdbc.Driver'解决办法   在Jmeter中run JDBC Request时, ...

  2. centos 7 安装vncserver遇到错误解决

    安装网上一般的教程安装配置,略. 执行 systemctl start vncserver@:1.service 启动服务报错: Job for vncserver@:1.service failed ...

  3. 多任务-python实现-使用队列完成进程间的通信(2.1.8)

    @ 目录 1.为什么要使用队列 2.python代码实现 1.为什么要使用队列 进程之间是互相独立的,而线程能够共享全局变量 所以如果进程间想要交换数据的话 只有通过进程间的通信,比如socket.太 ...

  4. 工具-绿色使用软件等-破解pycharm,idea等Jet brain出品软件(99.2.1)

    1.下载此文件链接:https://pan.baidu.com/s/12nbtgeWiD1xKMtPIr-S1-g密码:b66f 并将 JetbrainsCrack-3.1-release-enc.j ...

  5. vscode php转到定义

    点击再settings.json 中编辑 添加这一行,内容为php的安装路径

  6. 前方高能!看Python程序员是表白的

    一.️爱心墙️ 通过爬虫搜集到粉丝的头像,然后利用PIL库拼接出爱心墙的形状: 二.代码分析 1.头像爬取 在个人中心点击我的粉丝便可以看到自己的粉丝,通过抓包可知对应的接口为: url = 'htt ...

  7. webform中配置服务器控件的样式

    前台 Style <asp:Label ID="Label1" runat="server" Text="Label" Style=& ...

  8. java.io.IOException: Target host must not be null, or set in parameters. scheme=null, host=null, path=/

    使用的 xutils 出现标题中的错误 原因:没有添加 Cookie 1 params.addHeader("Cookie", CurrentUserSettings.getCoo ...

  9. Kibana查询语言(KQL)

    一.前言 现在大多数的公司都会使用ELK组合来对日志数据的收集.存储和提供查询服务,这里就不介绍什么是ELK了,只介绍一些EKL中的查询,也就是K(kibana). 查询数据库,如果是MySQL,那么 ...

  10. Idea mybatis maper接口与mapper.xml文件关联 会根据接口中的方法点在mxl中生成相应sql方法