二叉树的后继节点

简介: 二叉树的后继节点

Successor node

问题

求二叉树里一个节点的后继节点

思路

判断情况:

节点有右子树:找右子树的最左节点

节点没有右子树:往上查找,但节点不能为父节点的左子树

实现

class Node
{
    public:
    Node* left;
    Node* right;
    Node* parent;
    Node():left(nullptr),right(nullptr),parent(nullptr){}   
};
Node* GetSuccessorNode(Node* root,Node* cur)
{
    if(!cur) return cur;
    if(cur->right) return GetLeftestNode(cur->right);
    Node* parent = cur->parent;
    while(parent != nullptr && parent->left != cur)
    {
        cur = parent;
        parent = cur->parent;
    }
    return parent;
}
Node* GetLeftestNode(Node* root)
{
    while(root->left)
    {
        root = root->left;
    }
    return root;
}


目录
相关文章
|
网络安全 Nacos 数据安全/隐私保护
nacos常见问题之使用默认用户名密码提示错误如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
|
Linux Android开发 iOS开发
Windows平台RTSP|RTMP播放器如何实现实时录像功能
Windows平台RTSP、RTMP播放器实时录像接口设计,实际上,除了Windows平台,我们Linux、Android、iOS平台也是一样的设计,单纯的录像模块,如果做的全面,也不是一两个接口可以搞定的
328 1
|
存储 并行计算 算法
基础的点云转换
对于点云处理而言,最简单也逃不过的就是点云转换了,我们就从点云转换开始,来一步步完成点云加速的学习。点云基础转换是3D点云处理中的一个重要步骤。它的主要目的是将点云从一个坐标系转换到另一个坐标系中,通常是为了方便后续处理或者显示。在实际应用中,点云基础转换通常包括平移、旋转、缩放等操作。这里对应了pcl::transformPointCloud这种方法 1. CUDA与Thrust 使用CUDA和Thrust进行点云基础转换可以大大提高处理效率,特别是当点云数据量较大时。CUDA是一种并行计算架构,可以利用GPU的计算能力来加速计算,而Thrust是CUDA的C++模板库,提供了许多与ST
372 0
|
消息中间件 缓存 Java
《跟闪电侠学Netty》阅读笔记 - 开篇入门Netty(二)
《跟闪电侠学Netty》阅读笔记 - 开篇入门Netty
469 1
《跟闪电侠学Netty》阅读笔记 - 开篇入门Netty(二)
|
Web App开发 数据采集 JavaScript
剑走偏锋,正经程序员都在用的无头浏览器到底有多神奇?
浏览器是再熟悉不过的东西了,几乎每个人用过,比如 Chrome、FireFox、Safari,尤其是我们程序员,可谓开发最强辅助,摸鱼最好的伴侣。 浏览器能干的事儿,无头浏览器都能干,而且很多时候比标准浏览器还要更好 用,而且能实现一些很好玩儿的功能,我们能借助无头浏览器比肩标准浏览器强大的功能,而且又能灵活的用程序控制的特性,做出一些很有意思的产品功能来,稍后我们细说。
|
安全 Go 开发者
Go sync.Once:简约而不简单的并发利器
我是陈明勇,本文将详细介绍 Go 语言中的 sync.Once,包括它的基本定义、使用场景和应用实例以及源码分析等。在实际开发中,sync.Once 经常被用于实现单例模式和延迟初始化操作。
347 0
Go sync.Once:简约而不简单的并发利器
|
编译器 Swift 数据安全/隐私保护
开心档之 Swift 访问控制访问控制
Swift 访问控制访问控制可以限定其他源文件或模块中代码对你代码的访问级别。
【Go语言入门100题】022 奇偶分家 (10 分) Go语言 | Golang
L1-022 奇偶分家 (10 分) Go语言|Golang 给定N个正整数,请统计奇数和偶数各有多少个?
312 0
|
Java API
Java 集合系列16之 HashSet详细介绍(源码解析)和使用示例
概要 这一章,我们对HashSet进行学习。我们先对HashSet有个整体认识,然后再学习它的源码,最后再通过实例来学会使用HashSet。内容包括:第1部分 HashSet介绍第2部分 HashSet数据结构第3部分 HashSet源码解析(基于JDK1.6.0_45)第4部分 HashSet遍历方式第5部分 HashSet示例 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3311252.html   第1部分 HashSet介绍 HashSet 简介 HashSet 是一个没有重复元素的集合。
1135 0