力扣.面试题 04.06. 后继者(java 树的中序遍历)

Problem: 面试题 04.06. 后继者

文章目录

题目描述

设计一个算法,找出二叉搜索树中指定节点的"下一个"节点(也即中序后继)。

如果指定节点没有对应的"下一个"节点,则返回null。

思路

由于题意是找出一个在二叉搜索树中给定的节点的后继节点 ,按示例意思可知道为求二叉搜索树中序遍历递增序列中给定一个节点的相邻的下一个更大的值 ,进一步分析可得为利用二叉搜索树中序遍历的得出递增序列,再在此基础上求取一给定值的下一个比给定值大的值

解题方法

1.定义两个成员变量,一个用于记录在中序遍历过程中,当前节点是否为指定节点(假设为comming 返回类型为boolean),一个用于返回最后的结果(假设为succession 返回类型为TreeNode)(由于本解法用到递归处理二叉树的中序遍历,所以定义两个成员变量用于辅助记录!)

2.中序遍历查找指定节点,若当前节点是指定节点,则将comming修改为true,当再在递归过程中判断comming为true时 则表示当前节点为指定节点的下一个节点 ,将当前节点指向succession,最后返回即可。

3.注意:在递归过程中若判断succession不为null时说明已经找到后继节点,则可以提前结束递归!!!

复杂度

  • 时间复杂度:

O ( n ) O(n) O(n)

  • 空间复杂度:

O ( n ) O(n) O(n)

Code

java 复制代码
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    //Time Complexity: O(n)
    //Space Complexity: O(n)

    //用与记录下一个
    private boolean comming = false;
    private TreeNode successor = null;
    public TreeNode inorderSuccessor(TreeNode root, TreeNode p) {
        inOrder(root,p);
        return successor;
    }

    private void inOrder(TreeNode root, TreeNode p) {
        if (root == null) {
            return;
        }
        inOrder(root.left,p);
        if (successor != null) {
            return;
        }
        //如果上一个节点是指定节点
        if (comming == true) {
            successor = root;
            comming = false;
        }
        //入果当前节点是指点节点
        //将comming设置为true
        if (root == p) {
            comming = true;
        }
        inOrder(root.right,p);
    }
}
相关推荐
新时代牛马13 分钟前
SPL-TPL 链式启动:spl.c 与CONFIG_TPL 三阶段加载
c语言·开发语言
布莱克60517 分钟前
链表详解:定义、作用、应用场景及与数组的区别(C/C++ 实战)
c语言·开发语言·c++·链表
2601_9669496524 分钟前
实时行情中的成交量 Volume 到底是什么?包含盘中撤单量吗?从交易数据语义到 QuantDash 实战解析
开发语言·人工智能·python·量化·quantdash·量化数据源
鹿角片ljp31 分钟前
LeetCode 141. 环形链表|从 HashSet 到快慢指针 O (1) 空间最优解
算法·leetcode·链表
一嘴一个橘子36 分钟前
springmvc 全局异常处理【补充】
java
Wang's Blog1 小时前
Vibe Coding一人即团队系列35: 基于Claude Code的Spring Boot项目初始化实践
java·spring boot·后端
开开心心就好1 小时前
电子教鞭工具支持画框写字插图片功能齐全
android·开发语言·前端·javascript·人工智能·pdf·html
Dovis(誓平步青云)1 小时前
拍视频前先把镜头想清楚:做一个分镜取景辅助器
android·java·服务器·javascript·人工智能
AI人工智能+电脑小能手1 小时前
大白话说Java设计模式-45-解释器模式(源码剖析篇)
java·设计模式·解释器模式·源码分析·pattern·spel·javacc
zx_741484811 小时前
【Python入门】爬虫实战:Requests + XPath 从基础到实战
开发语言·爬虫·python