剑指offer 07. 二叉树的下一个节点

简介: 剑指offer 07. 二叉树的下一个节点

题目描述

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

注意:

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


数据范围

树中节点数量 [0,100]。

样例

假定二叉树是:[2, 1, 3, null, null, null, null], 给出的是值等于2的节点。
则应返回值等于3的节点。
解释:该二叉树的结构如下,2的后继节点是3。
  2
 / \
1   3


方法一:模拟 O(n)


找到结点在中序遍历中下一个遍历的结点即后继结点,需分情况讨论:


如果该结点有右孩子,就找到其右孩子。

如果其右孩子有左孩子,就找到最左边的孩子。例如,下图中结点 5 的后继结点为结点 6 。

如果其右孩子没有左孩子,就直接返回该结点。例如,下图中结点 8 的后继结点为结点 9 。

如果该结点没有右孩子,就找其父结点,找到其父结点的右孩子不等于它为止。例如,结点 4 的后继结点为结点 5 。



4a4b63a630204ef2b58e005614d63b11.png

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode *father;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL), father(NULL) {}
 * };
 */
class Solution {
public:
    TreeNode* inorderSuccessor(TreeNode* p) {
        //如果有右孩子
        if (p->right)
        {
            p = p->right;
            while (p->left)  p = p->left;
            return p;
        }
        //如果没有右孩子,就往上找
        while (p->father && p->father->right == p)   p = p->father;
        return p->father;
    }
};


欢迎大家在评论区交流~

目录
相关文章
|
12月前
|
机器学习/深度学习 算法 数据安全/隐私保护
数据链中常见电磁干扰matlab仿真,对比噪声调频,线性调频,噪声,扫频,灵巧五种干扰模型
本项目展示了用于分析和模拟电磁干扰对数据链系统影响的算法。通过Matlab 2022a运行,提供无水印效果图预览。完整代码包含详细中文注释及操作视频。理论部分涵盖五种常见干扰模型:噪声调频、线性调频、噪声、扫频和灵巧干扰,详细介绍其原理并进行对比分析。灵巧干扰采用智能技术如认知无线电和机器学习,自适应调整干扰策略以优化效果。
|
11月前
|
Java jenkins 持续交付
Jenkins集成Maven
通过以上步骤,可以在Jenkins中成功集成Maven,实现自动化构建和部署。通过定时构建、SCM轮询等方式,可以确保代码库中的最新变更能够及时构建和测试,提高开发效率和代码质量。这种集成方式在实际项目中具有广泛的应用前景,能够显著提升团队的协作效率。
302 8
|
11月前
|
JavaScript 前端开发 安全
盘点原生JS中目前最没用的几个功能API
在JavaScript的发展历程中,许多功能与API曾风光无限,但随着技术进步和语言演化,部分功能逐渐被淘汰或被更高效的替代方案取代。例如,`with`语句使代码作用域复杂、可读性差;`void`操作符功能冗余且影响可读性;`eval`函数存在严重安全风险和性能问题;`unescape`和`escape`函数已被`decodeURIComponent`和`encodeURIComponent`取代;`arguments`对象则被ES6的剩余参数语法替代。这些变化体现了JavaScript不断优化的趋势,开发者应紧跟技术步伐,学习新技能,适应新技术环境。
216 10
舆情风险防控措施分享
舆情风险防控措施分享
|
架构师 云计算
FinOps从业者认证(FinOps Certified Practitioner)
本课程涵盖FinOps基础知识、框架、核心角色及专业术语,并介绍云计算与FOCUS倡议入门。适合财务、采购、产品等部门专业人士,及ITAM、ITFM等领域的合作角色。课程包含互动培训模块、12个月材料访问权限及认证考试。通过考试后,可获FinOps认证证书及数字徽章,有效期24个月。考试由50道选择题组成,需达到75%得分。
|
SQL 分布式计算 大数据
MaxCompute产品使用问题之如何修改字段类型
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
259 2
|
SQL 关系型数据库 MySQL
深入解析MySQL视图、索引、数据导入导出:优化查询和提高效率
索引是一种特殊的数据库结构,由数据表中的一列或多列组合而成,可以用来快速查询数据表中有某一特定值的记录。通过索引,查询数据时不用读完记录的所有信息,而只是查询索引列。否则,数据库系统将读取每条记录的所有信息进行匹配。索引可以根据一个或多个列的值进行排序和搜索,提高查询时的效率。MySQL索引(Index)是一种特殊的数据结构,建立在表的列上,旨在加快数据库查询的速度通过在索引列上创建索引,数据库可以更快地定位和访问特定值,而无需扫描整个数据表。索引可以应用于单个列或多个列的组合,可以按升序或。
|
人工智能 数据可视化 Scala
在PyCharm中使用Jupyter进行人工智能学习开发经验介绍
在PyCharm中使用Jupyter进行人工智能学习开发经验介绍
855 0
|
数据可视化 容器
嵌入式 QT 界面布局管理
嵌入式 QT 界面布局管理