Leetcode 116. 填充每个节点的下一个右侧节点指针 解题思路及C++实现
方法一:层序遍历(这是比较暴力愚蠢的方法)
解题思路:
这里使用层序遍历访问这颗完美二叉树,使用的是两个栈,而不是两个队列,因为这样在遍历每一层并指定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++实现相关推荐
- 力扣116. 填充每个节点的下一个右侧节点指针(C++,附思路)
题目链接在这里: 116. 填充每个节点的下一个右侧节点指针 - 力扣(LeetCode) (leetcode-cn.com)https://leetcode-cn.com/problems/popu ...
- 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 ...
- 二叉树:填充每个节点的下一个右侧节点指针(java)
leetcode116:填充每个节点的下一个右侧节点指针 leetcode原题链接: 题目描述 递归解法一 递归方法二(效率更高) 二叉树专题 leetcode原题链接: 116题:填充每个节点的下一 ...
- leetcode116. 填充每个节点的下一个右侧节点指针
116. 填充每个节点的下一个右侧节点指针 难度中等128 给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点.二叉树定义如下: struct Node {int val;Node ...
- 力扣 填充每个节点的下一个右侧节点指针
填充每个节点的下一个右侧节点指针 题目描述 给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点.二叉树定义如下: struct Node { int val; Node *left ...
- [leetcode-117]填充每个节点的下一个右侧节点指针 II
(1 AC) 填充每个节点的下一个右侧节点指针 I是完美二叉树.这个是任意二叉树 给定一个二叉树 struct Node {int val;Node *left;Node *right;Node *n ...
- leetcode系列-116.填充每个节点的下一个右侧节点指针
题目描述: 给定一个 完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点. 二叉树定义如下: struct Node {int val;Node *left;Node *right;No ...
- 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 ...
最新文章
- java a3 套打印_Java - apache PDFBox兩個A3論文到一個A2?
- 【解题报告】Leecode 559. N 叉树的最大深度——Leecode每日一题
- nandflash与文件系统,oob区数据扫盲。后面还会补充实际生产烧录的心得体验,依据不同的文件系统
- Win32API 数据基本类型
- 燕山大学计算机考研专硕专业课,燕山大学(专业学位)计算机技术研究生考试科目和考研参考书目...
- SharePoint2007文档的点击率统计
- 搞定 Linux Shell 文本处理工具,看完这篇集锦就够了
- NoSQL、memcached介绍、安装memcached、查看memcached状态
- php UUID 分布式生成用不重复的随机数方法
- 基于格密码的算法研究
- CVE-2020-11946 ManageEngine OpManager 命令执行
- MAXON RE40直流有刷电机在Elmo SimplIQ cello系列驱动器的增益调节
- 阿里倡导成立“罗汉堂”, 6名诺贝尔奖得主加入
- CodeForces 711B. Chris and Magic Square(水题)
- oracle order siblings by,sql中ORDER SIBLINGS BY排序的含义
- 盘盈的存货一般应作为什么处理
- 不懂异或?一文详解移位操作符,位操作符
- Cisco ❀ IPV4协议数据报头部
- 重复性、分辨率的计算方法
- 软件测试需要学什么课程?好学吗?
热门文章
- 如何查看云服务器的系统版本,如何查看云服务器系统版本
- mysql的默认sid_默认实例(SID)已经设置,空实例默认连接时却连接不上?
- 第四课:PHP 变量
- 函数指针,指针函数,数组指针,指针数组 区分
- Beta版冲刺Day1
- Apache下部署Django 的样式问题
- 基于.Net 2.0 (C# 2.0, ASP.NET 2.0)的快速Web开发框架设计
- php返回null接收的是空字符串,求大神救命!!php接收到是空的字符串
- 一张图看懂阿里云网络产品【十五】IPv6 解决方案
- windows 安装与使用redis