【剑指 Offer】08.二叉树的下一个节点
题目描述
给定一颗二叉树和其中的一个节点,找出中序遍历序列的下一个节点。树中的节点除了有两个分别指向左右节点的指针,还有一个指向父节点的指针。
Java
public class Solution08 {
public static void main(String[] args) {
}
/**
* 方法一:回溯,分情况讨论
* 1. 当前节点有右子树,则下一个节点为右子树的最左子节点,如果无左子节点,则为右子节点本身;
* 2. 当前节点没有右子树,如果父节点的左子节点就是当前节点,则下一个节点为父节点;
* 3. 当前节点没有右子树,且父节点的左子节点不是当前节点,则应往上溯,
* 直到存在一个向上遍历的过程中存在一个节点的父节点的左子节点正好是该节点自身,则这个父节点就是下一个节点。
*/
public TreeLinKNode getNext(TreeLinKNode node) {
if (node == null) {
return null;
}
// 1.
if (node.right != null) {
node = node.right;
while (node.left != null) {
node = node.left;
}
return node;
}
// 2. 返回一个父节点是它左子节点的节点
while (node.parent != null) {
if (node.parent.left == node) {
return node.parent;
}
node = node.parent; // 3. 回溯
}
return null;
}
}
class TreeLinKNode {
int val;
TreeLinKNode left;
TreeLinKNode right;
TreeLinKNode parent;
public TreeLinKNode(int val, TreeLinKNode left, TreeLinKNode right, TreeLinKNode parent) {
this.val = val;
this.left = left;
this.right = right;
this.parent = parent;
}
@Override
public String toString() {
return "TreeLinKNode [" + (left != null ? "left=" + left + ", " : "")
+ (parent != null ? "parent=" + parent + ", " : "") + (right != null ? "right=" + right + ", " : "")
+ "val=" + val + "]";
}
}
C++
Python
总结
【剑指 Offer】08.二叉树的下一个节点的更多相关文章
- 剑指offer——06二叉树的下一个节点
题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 题目的意思是,在一颗二叉树的中序遍历中,给出其中一 ...
- 【剑指Offer】二叉树的下一个结点 解题报告(Python)
[剑指Offer]二叉树的下一个结点 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews ...
- Go语言实现:【剑指offer】二叉树的下一个结点
该题目来源于牛客网<剑指offer>专题. 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回. 注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. Go语 ...
- 【Java】 剑指offer(7) 二叉树的下一个结点
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 给定一棵二叉树和其中的一个结点,如何找出中序遍历顺序的下一个结点? ...
- 剑指Offer 57. 二叉树的下一个结点 (二叉树)
题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 题目地址 https://www.nowcoder.c ...
- [剑指Offer] 57.二叉树的下一个结点
题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. /* struct TreeLinkNode { in ...
- [剑指Offer]8-二叉树的下一个节点
链接 https://www.nowcoder.com/practice/9023a0c988684a53960365b889ceaf5e?tpId=13&tqId=11210&tPa ...
- 【剑指offer】08二叉树的下一个节点,C++实现
原创博文,转载请注明出处! # 题目 父节点指向子节点的指针用实线表示,从子节点指向父节点的指针用虚线表示. # 思路 如果节点有右子节点,则右子节点的最左节点是该节点的下一个节点.例如,寻找b的下一 ...
- 剑指offer57:二叉树的下一个结点
1 题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 2 思路和方法 中序遍历,下一个结点有两种情况 a ...
随机推荐
- 升级openssl和openssh版本
一.安装telnet-server服务(建议安装) 1. 查看系统是否已安装telnet-server,linux系统上默认已经安装telnet-client(或telnet),而telnet-ser ...
- Day1 字符编码及编码函数
ord() 函数 获取字符的整数表示chr() 函数 把整数编码转换为对应字符'\十六进制编码\十六进制编码' 可以将字符的整数编码使用十六进制的方式这样写Python字符串类型为str,在内存中以u ...
- adb devices查看不到Android模拟器的设备
1.先开启模拟器,后执行adb devices命令: List of devices attached 2.找到SDK的安装目录下platform-tools文件夹下adb.exe文件,将其复制到桌面 ...
- 带宽、延时、吞吐率、PPS 这些都是啥?
Linux 网络协议栈是根据 TCP/IP 模型来实现的,TCP/IP 模型由应用层.传输层.网络层和网络接口层,共四层组成,每一层都有各自的职责. 应用程序要发送数据包时,通常是通过 socket ...
- sonarqube代码质量检查简单使用说明
本文翻译自sonarqube官网文档,原地址为:https://docs.sonarqube.org/latest/architecture/architecture-integration/ 一,架 ...
- 03-flask-视图函数基础
代码 from flask import Flask, request, url_for, jsonify, redirect # 创建Flask对象 app = Flask(__name__) @a ...
- day111:MoFang:邀请好友流程&生成邀请好友二维码&第三方应用识别二维码&本地编译测试&记录邀请人信息
目录 1.邀请业务逻辑流程图 2.邀请好友-前端 3.邀请好友-后端接口(生成二维码) 4.前端获取后端生成的二维码 5.前端长按页面,保存图片到相册 6.客户端通过第三方识别微信二维码,服务端提供对 ...
- 网站开发学习Python实现-Django学习-总结(6.1.2)
@ 目录 1.MVT 2.模型 3.视图 4.模板 5.常用的命令 6.pycharm创建django工程 关于作者 1.MVT 项目结构如下,其中项目同名文件夹为配置文件 每一个项目有多个应用(未考 ...
- kali2020.01修改root终端颜色
kali2020.01非root用户的终端和root用户终端颜色存在较大差异: 修改配置,将非root用户的配置替换root用户,输入以下命令即可: cd /home/lijingrong //切换到 ...
- 2020年“感恩杯”台州学院第十三届大学生程序设计竞赛D、H、I题解(后续补充)
D题:小z与他的袜子 描述 小z每天会穿一双新袜子. 开始他的衣柜里有n双袜子,袜子会从1-n进行编号.每天早上他都会从衣柜里拿编号最小的袜子来穿.每天晚上他会把今天穿的袜子扔进篮子里,如果篮子里有n ...