题目链接在这里:

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++,附思路)相关推荐

  1. 力扣 填充每个节点的下一个右侧节点指针

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

  2. 2.<tag-二叉树和层序遍历相关题>-lt.116. 填充每个节点的下一个右侧节点指针 + lt.117. 填充每个节点的下一个右侧节点指针 II 1

    lt.116. 填充每个节点的下一个右侧节点指针 [案例需求] [思路分析一, 迭代法] [代码实现] /* // Definition for a Node. class Node {public ...

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

    2020-05-28 1.题目描述 填充每个节点的下一个右侧节点指针 2.题解 层次遍历即可 3.代码 /* // Definition for a Node. class Node { public ...

  4. leetcode116. 填充每个节点的下一个右侧节点指针

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

  5. 二叉树:填充每个节点的下一个右侧节点指针(java)

    leetcode116:填充每个节点的下一个右侧节点指针 leetcode原题链接: 题目描述 递归解法一 递归方法二(效率更高) 二叉树专题 leetcode原题链接: 116题:填充每个节点的下一 ...

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

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

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

    https://leetcode-cn.com/problems/populating-next-right-pointers-in-each-node/ 难度:中等   给定一个完美二叉树,其所有叶 ...

  8. LeetCode 116. 填充每个节点的下一个右侧节点指针(递归循环)

    文章目录 1. 题目 2. 解题 2.1 递归 2.2 循环 2.3 O(1)空间复杂度 1. 题目 给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点.二叉树定义如下: stru ...

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

    给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点.二叉树定义如下: struct Node { int val; Node *left; Node *right; Node *n ...

最新文章

  1. 2015.11.11
  2. 《解释性机器学习》笔记(五):Rule Fit 规则拟合
  3. axios拦截器_78.1K 的 Axios 项目有哪些值得借鉴的地方
  4. how to export many stock data from Wind terminal
  5. sql判断字段是否为空
  6. 访问cdrom中的数据 linux
  7. [神奇的问题啊,GetProcAddress一个不存在的API时,返回非空值,且指向另一个API]谜团解开,错不在GetProcAddress...
  8. 承载物联之城 阿里云为无锡建设统一物联网基础平台
  9. aliyun gradle 代理_gradle:现代高效的java构建工具
  10. 水往地处流,人往地处走
  11. 境外游导航App选择
  12. 保角变换法matlab编程,保角变换法.ppt
  13. 服务器上文件不能重命名,服务器文件重命名
  14. 谷歌,互联网界的“彩蛋狂魔”
  15. Blueprint Framemaker介绍
  16. 中科院计算机所副研究员,中科院计算技术研究所副研究员 谭光明
  17. Nginx具体配置(三)
  18. ESP32学习11:PWM
  19. iOS 设置代理详细步骤
  20. P2P网贷易遭黑客攻击

热门文章

  1. 携程apollo系列-个人开发环境搭建
  2. Spring 笔记
  3. Linux 下挂载新硬盘方法(转)
  4. 【扩展欧几里得】Bzoj 1477:青蛙的约会
  5. [开源应用]利用HTTPHandler+resumableJs+HTML5实现拖拽上传[大]文件
  6. 【转】博客园中应用LaTex进行公式编写
  7. UICollectionView 应用
  8. my footprint :走过的路
  9. 内存分配(malloc()和free())
  10. JBoss 系列十四:JBoss7/WildFly如何加载外部的文件或properties文件