• 力扣.面试题 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

    
    /**
     * 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);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
  • 相关阅读:
    给指针初始化为0与nullptr
    基于低代码开发平台为中小型企业打造OA系统
    【数据结构初阶】详解 环形链表:链表的带环问题(判断是否带环、环形链表的入口点)
    基于射频指纹的LoRa网络安全方案研究
    nacos和eureka的区别
    坦克大战①
    .NET中使用BootstrapBlazor组件库Table实操篇
    Cholesterol-PEG-Amine 胆固醇-聚乙二醇-氨基 用于调节膜流动性
    Spring Boot深度解析:快速开发的秘密
    二叉排序树的查找(递归、非递归)
  • 原文地址:https://blog.csdn.net/LNsupermali/article/details/134564698