寻找二叉树一个节点的后继节点

后继节点:中序遍历的后一个节点
普通二叉树:中序遍历得到一个list,时间复杂度O(n)
本题的二叉树:有父节点的指针,后继节点与原节点的距离为1,因此可以直接通过父节点找到下一个节点
优化:节点到另一个节点的真实距离为k,时间复杂度为O(k)
情况分析:
情况一:节点node有右子树,后继节点为右子树上的最左节点
情况二:节点node无右子树,沿着node向上找第一个作为左孩子的祖先,左孩子的父节点就是node的后继节点(因为此时节点node为节点Y左子树最右侧的节点)
对于情况二,在找到节点Y之后,节点Y即为node的后继节点,节点Y有没有右子树不重要
情况三:节点node本身为整颗二叉树最右的节点,没有后继节点,返回null

package binarytree;public class SuccessorNode {public class Node {int value;Node left;Node right;Node father;//这里定头节点的father节点为null,在创建二叉树时需要注意public Node(int data) {this.value = data;}}public Node getsuccessorNode(Node node) {if (node == null) {return node;}if (node.right != null) {//节点node有右子树while (node.left != null) {//找到最左的节点node = node.left;}return node;//返回右子树的最左节点} else {//没有右子树,向上找//node不为父节点的左孩子 并且 node的父节点不为null 则向上找while (node != node.father.left && node.father != null) {node = node.father;//此时为第一个不为右孩子的节点;此时为第一个为左孩子的节点}node = node.father;//如果node不是整颗二叉树的最右的节点,返回左孩子的父节点//如果node是整颗二叉树的最右的节点,node一直找到头节点,头节点的father为null,返回nullreturn node;}}}
相关文章:
寻找二叉树一个节点的后继节点
后继节点:中序遍历的后一个节点 普通二叉树:中序遍历得到一个list,时间复杂度O(n) 本题的二叉树:有父节点的指针,后继节点与原节点的距离为1,因此可以直接通过父节点找到下一个节点 优化:节点…...
如何能够获取到本行业的能力架构图去了解自己的能力缺陷与短板,从而能清晰的去弥补差距?
如何能够获取到本行业的能力架构图去了解自己的能力缺陷与短板,从而能清晰的去弥补差距? 获取并利用能力架构图(Competency Model)来了解自己在特定行业或职位中的能力缺陷和短板,并据此弥补差距,是一个非常…...
红队打靶:Misdirection打靶思路详解(vulnhub)
目录 写在开头 第一步:主机发现与端口扫描 第二步:Web渗透(80端口,战术放弃) 第三步:Web渗透(8080端口) 第四步:sudo bash提权 第五步:/etc/passwd利…...
10.23归并排序
课上 归并排序 最大时,就是两个都是完全倒序,但注意一定有一个序列先用完,此时剩一个序列只有一个元素,不用比较,直接加入,所以就是nn-1, 最小时,是都是完全有序,且一个序列中的元…...
[C++]:2初识C++(auto) + 类和对象上:
[TOC](初识C(auto) 类和对象上) 一.初始C 1.auto关键字:(C11) 1.作为一个变量的类型给这个类型初始化,auto自动识别初始化这个变量值的类型,为auto类型的这个变量开辟一个合适的空间。 补充: 1.typeid(变量名).name—>可以打…...
大学英语试卷
大学英语试卷 If everyone learns to set forth facts and reason things out in social life, many of the contradictions are easy to ____. A. oblige B. engage C. resolve D. commitIf we let the fastest runner set the____, the others will fall behind. A. pace B.…...
SpringBoot Lombok的使用
目录 下载Lombok插件 Lombok的用法 获取日志对象 生成get,set方法 Lombok框架的实现原理 Lombok的常用注解 下载Lombok插件 要使用Lombok首先要确保idea安装了lombok插件 在项目中添加 lombok依赖 在<dependency>里右键生成点击edit starters 插件(没有就下载,可…...
后台管理系统SQL注入漏洞
对于edu来说,是新人挖洞较好的平台,本次记录一次走运的捡漏0x01 前景 在进行fofa盲打站点的时候,来到了一个后台管理处看到集市二字,应该是edu站点 确认目标身份(使用的quake进行然后去ipc备案查询) 网…...
变量常用函数
查看变量类型 type(变量名) 用来查询变量所指的对象类型 >>> a, b, c, d 20, 5.5, True, 43j >>> print(type(a), type(b), type(c), type(d)) <class int> <class float> <class bool> <class complex> 基础数据类型 # coding…...
从零学算法(LCR 157)
某店铺将用于组成套餐的商品记作字符串 goods,其中 goods[i] 表示对应商品。请返回该套餐内所含商品的 全部排列方式 。 返回结果 无顺序要求,但不能含有重复的元素。 示例 1: 输入:goods “agew” 输出:[“aegw”,“aewg”,“ag…...
mysql 优化 聚簇索引=主键索引吗
在 InnoDB 引擎中,每张表都会有一个特殊的索引“聚簇索引”,也被称之为聚集索引,它是用来存储行数据的。一般情况下,聚簇索引等同于主键索引,但这里有一个前提条件,那就是这张表需要有主键,只有…...
c# ManualResetEvent WaitHandle 实现同步
//本文演示了ManualResetEvent 类的非静态set()、Reset()、WaitOne()和 //WaitHandle类的静态方法WaitAllWaitAll() //它们用于线程间的同步控制。 //实现了如下功能:线程1(定时控制)通知线程2和线程3采集数据 //线程2和3数据采集完了&am…...
使用Packstack安装器安装一体化OpenStack云平台
【实训目的】 初步掌握OpenStack快捷安装的方法。掌握OpenStack图形界面的基本操作。 【实训准备】 (1)准备一台能够安装OpenStack的实验用计算机,建议使用VMware虚拟机。 (2)该计算机应安装CentOS 7,建…...
【Rust】4 一文讲解重点 pattern matching | trait | 生命周期 | 闭包 | 迭代器 | 智能指针 | 并发与并行
文章目录 一、pattern matching二、trait2.1 常见 trait2.1.1 Copy 和 Clone2.1.2 PartialEq 和 Eq2.1.3 PartialOrd 和 Ord2.1.4 Hash2.1.5 From, Into, TryFrom, TryInto 2.2 概念2.2.1 关联类型2.2.2 关联常量2.3.3 泛型关联类型2.3.3.1 示例: 用泛型关联类型, 创建集合工厂…...
idea Java代码格式化规范
文章目录 引入基础知识代码模板idea模板eclipse模板1.安装插件2.生成配置文件3.导入配置文件 附录一:xml配置项说明附录二:赠送 引入 最近在公司开发中,遇到了一点小问题,组内各同事的格式化规范不一致。一来导致代码样式并不统一…...
apple MFI工厂认证,干货,为防止MFI工作人员查看,已设置VIP阅读
一开始以为审核特别严格,准备了好久,经历过了之后会发现很简单,1个小时完成了所有审核事项。 好好招待审计员,比如能接送就接送,到点吃饭就尽量约时间吃饭后再审计,找个正式的会议室,该摆盘水果就摆上,让审计员感觉到公司是很重视这次的MFI审核,但是不能贿赂发红包那…...
软件企业知识库应用场景?如何搭建软件企业知识库?
想要减少人工干预、减少不必要的时间和人力成本、快速获取准确信息……这些应用场景对于我们企业来说是非常渴望在短期内实现的。 软件企业知识库 因为传统知识库仅仅是存储:知识只是“存储”,根本用不起来,缺乏有效的管理方式和储存载体&am…...
华为OD 滑动窗口最大值(100分)【java】B卷
华为OD统一考试A卷+B卷 新题库说明 你收到的链接上面会标注A卷还是B卷。目前大部分收到的都是B卷。 B卷对应20022部分考题以及新出的题目,A卷对应的是新出的题目。 我将持续更新最新题目 获取更多免费题目可前往夸克网盘下载,请点击以下链接进入: 我用夸克网盘分享了「华为O…...
软件测试 (用例篇)
前言 上一篇博客讲述的是一次基本的测试过程。 在我们开始做了一段时间基础测试,熟悉了业务之后,往往会分配来写测试用例,并且在日常测试中,有时也需要补充测试用例到现有的案例库中。 在这里我们将回答以下问题 1、测试用例的…...
5G技术的飞速发展:连接未来
随着科技的日益进步,5G通讯技术已经成为了全球科技领域的热门话题。5G,即第五代移动通信技术,带来的不仅仅是更快的网络速度,它的高带宽和低延迟特性将为未来的数字世界奠定基础。 速度与效率的飞跃: 5G技术的最大亮点是它极高的下…...
GLM-OCR企业级多模态应用展示:结合视觉与文本理解复杂图表
GLM-OCR企业级多模态应用展示:结合视觉与文本理解复杂图表 你是不是也遇到过这种情况?拿到一份满是图表的业务报告,想快速提取里面的关键数据,却只能对着屏幕手动敲键盘,或者用传统的OCR工具识别出一堆零散的文字&…...
别再重复造轮子了 教你一招:把全球开源宝库,变成你个人的技能库
文章目录前言一、为什么说"重复造轮子"是程序员最大的浪费?二、全球开源宝库到底有多大?你可能低估了三、找轮子的艺术:如何从海量仓库里挖出宝藏?3.1 善用AI搜索,别再用传统方式了3.2 关注Awesome系列和 cu…...
AI软件研发成本飙升的真相:3个被忽视的隐性成本源,今天不查明天多烧47%预算!
第一章:AI原生软件研发成本优化实战技巧 2026奇点智能技术大会(https://ml-summit.org) AI原生软件的研发成本常被模型训练开销主导,但实际可观测的浪费更多来自推理服务冗余、提示工程低效、以及缺乏细粒度资源编排。聚焦可落地的降本路径,…...
没有后台服务的鸿蒙应用,算不算“半成品”?——本地 Service Extension 开发真香指南!
大家好,我是[晚风依旧似温柔],新人一枚,欢迎大家关注~ 本文目录:前言一、ExtensionAbility 类型:先搞清“职业分工”,再谈用谁干活1️⃣ ExtensionAbility 大家族速览二、后台服务场景:哪些事儿…...
Prompt 焚诀——一个模板,终结你和 AI 的所有沟通问题确
AI训练存储选型的演进路线 第一阶段:单机直连时代 早期的深度学习数据集较小,模型训练通常在单台服务器或单张GPU卡上完成。此时直接将数据存储在训练机器的本地NVMe SSD/HDD上。 其优势在于IO延迟最低,吞吐量极高,也就是“数据离…...
使用钉钉远程操作你的claude code寺
先回顾:三次握手(建立连接)核心流程(实际版) 为了让挥手流程衔接更顺畅,咱们先快速回顾三次握手的实际核心,避免上下文脱节: 第一步(客户端→服务器)…...
SQL如何处理包含NULL分组的聚合计算_NULLS LAST排序技巧
SQL中NULL在GROUP BY中被视为相同值而归为一组,但业务上“未填”与“明确为空”需用CASE WHEN区分;ORDER BY NULLS LAST兼容性差,MySQL 5.7需用IF模拟;聚合函数自动忽略NULL,AVG全NULL时返回NULL而非0;WHER…...
让开发流程更高效:为 Visual Studio 订阅用户解锁 Syncfusion辛
一、什么是requests? requests 是一个用于发送HTTP请求的 Python 库。 它可以帮助你: 轻松发送GET、POST、PUT、DELETE等请求 处理Cookie、会话等复杂性 自动解压缩内容 处理国际化域名和URL 二、应用场景 requests 广泛应用于以下实际场景: …...
VSCode插件Continue配置避坑指南:手把手教你无缝对接OpenStation的本地大模型服务
VSCode插件Continue配置避坑指南:手把手教你无缝对接OpenStation的本地大模型服务 当你已经成功部署了OpenStation的本地大模型服务,却在VSCode中配置Continue插件时遇到各种"拦路虎",这篇文章就是为你准备的调试手册。我们将深入每…...
HarmonyOS PC 命令行工具构建框架
欢迎大家一起共建 HarmonyOS PC 生态! 🚀 欢迎加入开源鸿蒙PC社区:https://harmonypc.csdn.net/ 目录 概述环境准备 Windows 环境(WSL)Linux 环境(Ubuntu 22.04)macOS 环境 快速开始详细步骤…...
