首页 > 其他分享 >LeetCode 剑指 Offer 08. 二叉树的下一个节点

LeetCode 剑指 Offer 08. 二叉树的下一个节点

时间:2023-07-11 18:22:04浏览次数:42  
标签:左子 nil Offer 08 右子 二叉树 中序 节点

题目:二叉树的下一个节点

给定一棵二叉树的其中一个节点,请找出中序遍历序列的下一个节点。(树的后继)

注意:

  • 如果给定的节点是中序遍历序列的最后一个,则返回空节点;
  • 二叉树一定不为空,且给定的节点一定不是空节点;

解题思路

二叉树的中序遍历:{ [左子树], 根节点, [右子树] }

如图所示二叉树的中序遍历:D, B, H, E, I, A, F, C, G

分三种情况:

  1. 如果该节点有右子树,那么下一个节点就是其右子树中最左边的节点;

  2. 如果该节点没有右子树,且是其父节点的左子节点,那么下一个节点就是其父节点;

  3. 如果该节点没有右子树,且是其父节点的右子节点,沿着父指针一直向上,直到找到一个是它父节点的左子节点的节点,如果这样的节点存在,那么这个节点的父节点即是所求。

例如:

  • 情况 1:图中节点 B 的下一个节点是节点 H;

  • 情况 2:图中节点 H 的下一个节点是节点 E;

  • 情况 3:图中节点 I 的下一个节点是节点 A。

时空复杂度:O(height),其中 height 是二叉树的高度, 空间复杂度:O(1)

func inorderSuccessor(p *TreeNode) *TreeNode {
	//右子树存在 右子树最左边的结点
	if(p.Right != nil){
		p = p.Right
		for(p.Left != nil){
			p = p.Left
		}
		return p
	}
	//右子树不存在 只有左子树
	for(p.Father != nil){
		//p不是根节点
		if(p == p.Father.Left) {  //如果是父节点的左子树
			return p.Father  //返回父节点
		}
		p = p.Father   //继续往上找
	}
	return nil
}

标签:左子,nil,Offer,08,右子,二叉树,中序,节点
From: https://www.cnblogs.com/lxing-go/p/17545607.html

相关文章

  • ASEMI整流桥GBU808参数和应用
    编辑-Z整流桥GBU808是一种常见的电子元件,用于将交流电转换为直流电。它由四个二极管组成,可以全波整流。GBU808具有高电流和高电压的特点,适用于各种电源和电路应用。 GBU808的主要特点之一是其高电流能力。它可以承受高达8安培的电流,适用于大功率电子设备和电源系统。此外,GBU80......
  • ASEMI整流桥GBU808参数和应用
    编辑-Z整流桥GBU808是一种常见的电子元件,用于将交流电转换为直流电。它由四个二极管组成,可以全波整流。GBU808具有高电流和高电压的特点,适用于各种电源和电路应用。 GBU808的主要特点之一是其高电流能力。它可以承受高达8安培的电流,适用于大功率电子设备和电源系统。此外,GBU808还......
  • 108.如何设计一个计算仅单个子类的对象个数?
    108.如何设计一个计算仅单个子类的对象个数?1.为类设计一个static静态变量count作为计数器;2.类定义结束后初始化count;3.在构造函数中对count进行+1;4.设计拷贝构造函数,在进行拷贝构造函数中进行count+1,操作;5.设计赋值构造函数,在进行赋值函数中对count+1操作;6.在析构函数中......
  • ASEMI整流桥KBU808参数,KBU808怎么判断好坏?
    编辑-ZKBU808是一种常用的整流桥,常用于电源和电机控制电路中。了解KBU808的参数和判断其好坏的方法对于电子工程师和电路设计师来说非常重要。 首先,让我们来了解一下KBU808的参数。KBU808是一种单相全波整流桥,具有以下主要参数: 1.最大正向电流(MaximumForwardCurrent):这是......
  • 1084-销售分析 Ⅲ
    销售分析Ⅲ原文地址:1084.销售分析III-力扣(LeetCode)题目如下所示个人题解这题简单也简单,不简单也不简单。个人的思考过程如下列SQL所示--1.建表CREATETABLE1084_Product( product_idINT,--产品id product_nameVARCHAR(20),--产品名称 unit_price......
  • DevTools 无法加载源映射: 无法加载httplocalhost8081staticscssbootstrap.min.css.map
    DevTools无法加载源映射:无法加载http://localhost:8081/statics/css/bootstrap.min.css.map的内容:HTTP错误:状态代码404,net::ERR_HTTP_RESPONSE_CODE_FAILURE 解决办法:找到bootstrap.min.css,删除最后一行注释 注意:如果是css报错就删除:/*#sourceMappingURL=bootst......
  • 8086汇编语言精讲3 :寄存器(内存访问)
    字与字节  数据总线宽度的真谛  8086cpu不支持直接将数据送入段寄存器的操作,而ds就是一个段寄存器,所以只要用其他寄存器来中转数据进去ds中  栈   逆序效果     ......
  • 【雕爷学编程】Arduino动手做(141)---AS608光学指纹识别模块2
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞......
  • 【计数,DP】CF1081G Mergesort Strikes Back
    ProblemLink现有一归并排序算法,但是算法很天才,设了个递归深度上限,如果递归深度到达\(k\)则立即返回。其它部分都和正常归并排序一样,递归中点是\(\lfloor(l+r)/2\rfloor\),归并每次取两边较小者加入结果。给定\(n,k\),求用这个算法对一个均匀随机的排列\(p\)排序后,\(p\)......
  • Atcoder ABC308H Make Q
    考虑枚举唯一一个度数为\(3\)的点\(u\),即既在环上又与非环上一点相连的那个点。接下来考虑先处理环,那可以先把\(u\)从图上删掉,环的最短距离便是与\(u\)有连边的\(2\)个点在图上最短路长度加上\(2\)个点与\(u\)连边的长度,即\(\min\{w_{u,i}+w_{u,j}+\operator......