方法一:层序遍历(这是比较暴力愚蠢的方法)

解题思路:

这里使用层序遍历访问这颗完美二叉树,使用的是两个栈,而不是两个队列,因为这样在遍历每一层并指定next指针时会更方便一些,但是要注意的一点是,循环内的临时栈s2 是先push右子节点,再push左子节点。s2中节点顺序是反过来的,所以要依次pop到s1中。

/*
// Definition for a Node.
class Node {
public:int val;Node* left;Node* right;Node* next;Node() {}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;//层序遍历stack<Node*> s1;s1.push(root);while(!s1.empty()){stack<Node*> s2;Node* temp1 = NULL;Node* temp2 = NULL;while(!s1.empty()){temp1 = s1.top();s1.pop();temp1->next = temp2;temp2 = temp1;if(temp1->left){s2.push(temp1->right);s2.push(temp1->left);}}//s2中节点顺序是反过来的while(!s2.empty()){s1.push(s2.top());s2.pop();}}return root;}
};

方法二:技巧型

解题思路:

因为是一颗完美二叉树,所以,对于某个节点来说,其左子节点的next指针直接指向其右子节点即可,右子节点指向其父节点next指针所指节点的左子节点,若其父节点next指针为null,则该右子节点的next也指向null。

但是递归耗时费内存啊!

/*
// Definition for a Node.
class Node {
public:int val;Node* left;Node* right;Node* next;Node() {}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;if(root->left) root->left->next = root->right;if(root->right) {if(root->next) root->right->next = root->next->left;}root->left = connect(root->left);root->right = connect(root->right);return root;}
};

Leetcode 116. 填充每个节点的下一个右侧节点指针 解题思路及C++实现相关推荐

  1. 力扣116. 填充每个节点的下一个右侧节点指针(C++,附思路)

    题目链接在这里: 116. 填充每个节点的下一个右侧节点指针 - 力扣(LeetCode) (leetcode-cn.com)https://leetcode-cn.com/problems/popu ...

  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. 二叉树:填充每个节点的下一个右侧节点指针(java)

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

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

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

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

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

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

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

  8. leetcode系列-116.填充每个节点的下一个右侧节点指针

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

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

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

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

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

最新文章

  1. java a3 套打印_Java - apache PDFBox兩個A3論文到一個A2?
  2. 【解题报告】Leecode 559. N 叉树的最大深度——Leecode每日一题
  3. nandflash与文件系统,oob区数据扫盲。后面还会补充实际生产烧录的心得体验,依据不同的文件系统
  4. Win32API 数据基本类型
  5. 燕山大学计算机考研专硕专业课,燕山大学(专业学位)计算机技术研究生考试科目和考研参考书目...
  6. SharePoint2007文档的点击率统计
  7. 搞定 Linux Shell 文本处理工具,看完这篇集锦就够了
  8. NoSQL、memcached介绍、安装memcached、查看memcached状态
  9. php UUID 分布式生成用不重复的随机数方法
  10. 基于格密码的算法研究
  11. CVE-2020-11946 ManageEngine OpManager 命令执行
  12. MAXON RE40直流有刷电机在Elmo SimplIQ cello系列驱动器的增益调节
  13. 阿里倡导成立“罗汉堂”, 6名诺贝尔奖得主加入
  14. CodeForces 711B. Chris and Magic Square(水题)
  15. oracle order siblings by,sql中ORDER SIBLINGS BY排序的含义
  16. 盘盈的存货一般应作为什么处理
  17. 不懂异或?一文详解移位操作符,位操作符
  18. Cisco ❀ IPV4协议数据报头部
  19. 重复性、分辨率的计算方法
  20. 软件测试需要学什么课程?好学吗?

热门文章

  1. 如何查看云服务器的系统版本,如何查看云服务器系统版本
  2. mysql的默认sid_默认实例(SID)已经设置,空实例默认连接时却连接不上?
  3. 第四课:PHP 变量
  4. 函数指针,指针函数,数组指针,指针数组 区分
  5. Beta版冲刺Day1
  6. Apache下部署Django 的样式问题
  7. 基于.Net 2.0 (C# 2.0, ASP.NET 2.0)的快速Web开发框架设计
  8. php返回null接收的是空字符串,求大神救命!!php接收到是空的字符串
  9. 一张图看懂阿里云网络产品【十五】IPv6 解决方案
  10. windows 安装与使用redis