二叉树 — 给定二叉树中某个节点,返回该节点的后继节点

news2024/11/22 9:34:13

后继节点定义:
二叉树以中序的方式进行遍历打印,节点X的下一个节点,就是X的后继节点。
假设二叉树如下图所示:则中序遍历的后打印出来的就是 4 -> 2 -> 5 -> 1 -> 6 -> 3 -> 7。如果X = 3,则X的后继节点就是7。
在这里插入图片描述
如果Node的结构中只有left和right的话,那时间复杂度就是 O ( N ) O(N) O(N),从给定的头结点开始遍历,先打印出来中序,在遍历中序找到X,在找到X的下一个。
如果给定的Node的数据结构中包含parent指针,则可以将时间复杂度降低到 O ( K ) O(K) O(K)。K为X到后继节点的实际距离。

public static class Node {
		public int value;
		public Node left;
		public Node right;
		public Node parent;

		public Node(int data) {
			this.value = data;
		}
	}

分析:
因为中序遍历是按照 左 -> 头 -> 右的方式进行打印,所以要考虑X所处的位置。

  1. 如果X有右树,则X的后继节点一定是右树中的最左节点。
  2. 如果X没有右树,则看X是否是X.parent的left节点,如果是,则parent就是X的后继节点,如果不是,则一直向上找。直到找到当前节点是parent的左子节点为止,如果找不到,则说明X是右树最末端节点,后继节点为null。

代码实现:

 public static Node getSuccessorNode(Node node){
        if (node == null){
            return node;
        }
        if (node.right != null){
            return getLeftMost(node.right);
        }else{
            Node parent = node.parent;
            if (parent != null && node != parent.left){
                node = parent;
                parent = node.parent;
            }
            return parent;
        }
    }

    public static Node getLeftMost(Node node){
        if (node == null){
            return node;
        }
        while (node.left != null){
            node = node.left;
        }
        return node;
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/718193.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Docker网络模型以及容器网络初探(一)

〇、前言 安装Docker时,它会自动创建三个网络,默认bridge网桥(创建容器默认连接到此网络)、 none 、host。各个方式有各自的特点,它们有着特定的差距,比如网络性能等,一般按照实际应用方式手动…

大数据之数据采集项目总结——hadoop,hive,openresty,frcp,nginx,flume

1、前期准备 2、数据收集 1、开启openresty,nginx和frcp内网穿透 2、编辑并启动定时器 3、查看是否收集到了数据 数据收集阶段结束,进入下一个阶段 2、将收集到的切分好的数据上传到hdfs 使用的工具:flume flume像一个管道一样&#xff0c…

三十九、动态规划——线性DP问题-例题题解

线性DP问题的例题状态划分 一、问题:数字三角形1、题目内容2、状态划分1)状态编号 f[i][j]2)状态划分 3、题解 二、最长上升子序列1、题目内容2、状态划分1)状态编号 f[i]2)状态划分 3、题解 三、最长公共子序列1、题目…

【二维偏序+双指针】ABC245 E

E - Wrapping Chocolate (atcoder.jp) 题意: 思路: 因为两个数组都是无序的,因此可以考虑给这两个数组都排个序 将物品和盒子都按照两个维度去排序 我们可以先去枚举物品,然后去选对应的盒子 在选盒子的过程中,注…

【王道·操作系统】第四章 文件管理(下)

一、文件系统 1.1 文件系统的层次结构 用户需要通过操作系统提供的接口发出上述请求——用户接口由于用户提供的是文件的存放路径,因此需要操作系统一层一层地查找目录,找到对应的目录项——文件目录系统不同的用户对文件有不同的操作权限,因…

c++读取字符串字符时出错

这是我做的一个c爬虫程序但是在抓取网页的时候string类型传递出现了问题 以下是图片代码 url的值是 "http://desk.zol.com.cn/" 我不知道为什么数据传递会出问题 请大佬指教

Java 串口通信(RS232/485)

Java 串口通信(RS232/485) 一.串口通信页面二.串口服务实现1.Java 串口通信配置1.扩展包和依赖库2.Pom配置 2.启动类3.工具包类1.Common2.Crc16Modbus3.SerialUtil 4.WebSocket 配置1.启动配置2.监听配置 5.UI交互类1.串口配置对象2.串口信息获取接口3.R…

HOT39-对称二叉树

leetcode原题链接:对称二叉树 题目描述 给你一个二叉树的根节点 root , 检查它是否轴对称。 示例 1: 输入:root [1,2,2,3,4,4,3] 输出:true示例 2: 输入:root [1,2,2,null,3,null,3] 输出&a…

JVM03-优化垃圾回收

JVM的内存区域中,程序计数器、虚拟机栈和本地方法栈这3个区域是线程私有的,随着线程的创建而创建,销毁而销毁;栈中的栈帧随着方法的进入和退出进行入栈和出栈操作,每个栈帧中分配多少内存基本是在类结构确定下来的时候…

消息中间件面试题详解

RabbitMQ 如何保证消息不丢失 消息的重复消费问题如何解决 rabbitmq中死信交换机(RabbitMQ延迟队列有了解吗) 延迟队列:进入队列的消息会被延迟消费的队列 场景:超时订单,限时优惠,定时发布 延迟队列 …

【Linux】-第一个小程序(进度条)

💖作者:小树苗渴望变成参天大树 🎉作者宣言:认真写好每一篇博客 🎊作者gitee:gitee 💞作者专栏:C语言,数据结构初阶,Linux,C 动态规划算法 如 果 你 喜 欢 作 者 的 文 章 ,就 给 作…

Activiti modoler 整合后报错 TypeError: Cannot read property ‘namespace‘ of undefined

之前在Demo整合过没问题,结果好不容易整合到现在的项目,结果出现成这个鬼样子……问题找了好久,一直以为是SpringSecurity请求限制没放开,所以找SpringSecurity的debug日志,浏览器请求有没有404、500、502等&#xff0…

将OpenAI和ChatGPT模型与LearnDash线上学习平台结合使用

人工智能革命来了!(以尽可能最好的方式。)了解如何使用 Uncanny Automator 通过 OpenAI 和 ChatGPT 模型为您的线上学习和LearnDash LMS提供动力。 当人们听到“人工智能”这个词时,他们往往会想到流氓机器人、无政府状态的机器人…

科技项目验收测试报告包括哪些内容?

科技项目验收测试报告是评估科技项目质量和可靠性的重要文件。通过全面的测试和评估,可以确保项目的质量,提高用户满意度,降低项目风险。 一、科技项目验收测试报告的内容 1. 项目概述:介绍项目的背景、目标和范围,…

从 AI 增强到大模型,企业使用数据的方式又将如何变化?

AI(Artificial Intelligence,人工智能)的发展不过百年,却已经深刻影响着人们的思维和见解,并逐渐关联到每个人生活和工作的方方面面。从最初的规则引擎和引入统计学方法,到基于知识表示和推理机制的专家系统…

瓴羊QuickBI数据门户帮助企业高效管理和展示数据,使其更加明确易懂

随着信息技术时代的到来,越来越多的企业意识到商业信息是其最宝贵的资产之一。对于获取商业信息,需要专业的数据分析。因此,商业智能BI工具,如瓴羊QuickBI已经成为企业信息化中必不可少的工具。它拥有卓越的数据管理和展示功能&am…

VS2019中WebService实现发布、调用以及问题汇总

VS2019中WebService实现发布、调用以及问题汇总 前言一、WebService是什么,意义有哪些?二、创建二.发布三.访问问题总结1.不是专用连接2.HTTP错误 403.14 - Forbidden3.HTTP 错误 404.3 - Not Found4.应用程序种服务器错误 前言 在对接工厂Mes的过程中&…

图书馆流量监控性能分析案例

前言 图书馆信息中心老师反应,用户反馈系统有访问慢的情况,需要通过流量分析系统来了解图书馆系统的运行情况,此报告专门针对图书馆系统的性能数据做了分析。 图书馆已部署NetInside流量分析系统,使用流量分析系统提供实时和历史…

springboot 整合mybatis plus,使用druid 切换多数据源实现单数据库事务,附赠项目源码地址

项目源码地址 GitHub - liyanlei58/ssm: springboot druid mybatis plus 事务 最近想搭一套spring cloud开发环境,各种不顺利吧,先是spring cloud的组件某些功能不好用,是版本自身的bug。后来又碰到了事务无法回滚,这个搞了好几个…

银河麒麟服务器v10 sp1 安装mysql

可以先用 dpkg --list|grep mysql 查看自己的mysql有哪些依赖: 上图已经是安装后的截图,然后再卸载 sudo apt-get autoremove --purge mysql-common 本文在没有安装之前,只有mysql-common包,再用dpkg --list|grep mysql查看&…