leetcode 116 --- 填充每个节点指向最右节点的next指针
1 题目
填充每个节点指向最右节点的next指针,
填充所有节点的next指针,指向最接近它的同一层右边节点。如果没有同一层没有右边的节点,则应该将next指针设置为NULL。
初始时,所有的next指针都为NULL
注意:
- 你只能使用常量级的额外内存空间
- 可以假设给出的二叉树是一个完美的二叉树(即,所有叶子节点都位于同一层,而且每个父节点都有两个孩子节点)。
2 解法
因为此题为按层来填充每一个节点的next为其同层的右节点(如果存在的话)
2.1 用队列的方法
2.2 不用队列
因为需要将每一层用next指针链接好, 所以遍历的思想是,链接好的一层遍历的时候把其下一层链接好, 在每一层遍历时,因为要链接其下一层的各个节点,所以要用一个last指针将上一个被链接为next的节点标记好,且要标记好下一层的头节点,以便于上一层遍历完遍历下一层,所以有:
/*** Definition for binary tree with next pointer.* struct TreeLinkNode {* int val;* TreeLinkNode *left, *right, *next;* TreeLinkNode(int x) : val(x), left(NULL), right(NULL), next(NULL) {}* };*/
class Solution {
public:void connect(TreeLinkNode *root) {TreeLinkNode *start(root);while (start) {TreeLinkNode *nextStart(NULL), *last(NULL);for (auto p = start; p != NULL; p = p->next) {if (p->left) {if (!nextStart)nextStart = p->left;if (last)last->next = p->left;last = p->left;}if (p->right) {if (!nextStart)nextStart = p->right;if (last)last->next = p->right;last = p->right;}}start = nextStart;}}
};
leetcode 116 --- 填充每个节点指向最右节点的next指针相关推荐
- LeetCode 116. 填充每个节点的下一个右侧节点指针
https://leetcode-cn.com/problems/populating-next-right-pointers-in-each-node/ 难度:中等 给定一个完美二叉树,其所有叶 ...
- Leetcode 116. 填充每个节点的下一个右侧节点指针 解题思路及C++实现
方法一:层序遍历(这是比较暴力愚蠢的方法) 解题思路: 这里使用层序遍历访问这颗完美二叉树,使用的是两个栈,而不是两个队列,因为这样在遍历每一层并指定next指针时会更方便一些,但是要注意的一点是,循 ...
- 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 ...
- 最右叶节点和最右节点
一个是最右边的叶子结点, 一个就是最右边的 可以不是叶子结点
- LeetCode 117. 填充每个节点的下一个右侧节点指针 II(递归循环)
文章目录 1. 题目 2. 解题 2.1 递归 2.2 queue循环 2.3 利用next循环 1. 题目 填充它的每个 next 指针,让这个指针指向其下一个右侧节点.如果找不到下一个右侧节点,则 ...
- LeetCode 24.两两交换链表中的节点 C语言
题目 24.两两交换链表中的节点 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2->3- ...
- [leetcode] 116. Populating Next Right Pointers in Each Node @ python
原题 Given a binary tree struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode * ...
- LeetCode 116/117 填充每个节点下一个右侧指针
力扣117 力扣116 目录 思路:(116,117方法完全相同) 层序遍历 思路:(116,117方法完全相同) 层序遍历 二叉树层序遍历模板 以上可以总结出 在对列中出队一个节点后,将该节点指向队 ...
最新文章
- C#创建Windows服务
- Android Parcelable
- Xamarin XAML语言教程使用Xamarin Studio创建XAML(二)
- python就业方向哪个好-学习python就业方向都有哪些?
- [转]Java8-本地缓存
- android d-bus,android EventBus的使用
- 飞鸽_飞鸽传书_飞鸽传书2010_飞鸽传书2010下载
- 如何破解受保护的excel密码
- ffmpeg软硬件解码基础(总目录)
- 互联网系统架构的演进
- Dapper使用在WCF上总是说Service找不到
- 整理了70个Python实战项目列表,都有完整且详细的教程
- Google - 搜索图片快速设置
- 自定义控件ViewGroup上下滑动
- 高德纳(Donald Knuth)语录
- 使用CefSharp开发一个12306“安心刷票弹窗通知”工具
- Backdoor.Zegost木马病毒分析(一)
- 【Proe】三维模型转二维CAD图
- RabbitMQ之web界面解析
- 人生第一份工作离职了,给自己交予的答卷