力扣174. 寻找二叉搜索树中的目标节点(java,二叉搜索树的性质的运用)

Problem: LCR 174. 寻找二叉搜索树中的目标节点

文章目录

思路

首先我们可以知道二叉搜索树的如下性质

1.若中序遍历先遍历左子树再右子树可以的到一个递增的序列

2.若中序遍历先遍历右子树再左子树可以的到一个递减的序列

所以我们得出如下思路:

1.以右-根-左 的顺序中序递归遍历

2.在递归遍历的的过程中记录一个递增变量,当其为第cnt大的时,结束递归返回该节点值即可。

解题方法即注意点

大体解题方法见思路,注意下点可以优化代码

当记录的递增变量大于等于cnt时,即可退出递归达到一个减枝的效果

复杂度

  • 时间复杂度:

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() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    //Time Complexity: O(n)
    //Space Complexity: O(n)

    int count = 0;
    int result;
    public int findTargetNode(TreeNode root, int cnt) {
        inorder(root,cnt);
        return result;
    }

    //二叉搜索树的中序遍历函数
    //左根右:从小到大
    //右根左:从大到小
    public void inorder(TreeNode root, int cnt) {
        //减枝:当count大于cnt时直接退出
        if (count >= cnt) return;
        if (root == null) return;
        //先遍历右子树
        inorder(root.right,cnt);
        count++;
        //再归的过程中查找是否存在
        if (count == cnt) {
            result = root.val;
            return;
        }
        inorder(root.left,cnt);
    }

}
相关推荐
GottdesKrieges3 分钟前
OceanBase恢复常见问题
java·数据库·oceanbase
IGAn CTOU3 分钟前
Java高级开发进阶教程之系列
java·开发语言
漂流瓶jz4 分钟前
UVA-1152 和为0的4个值 题解答案代码 算法竞赛入门经典第二版
数据结构·算法·二分查找·题解·aoapc·算法竞赛入门经典·uva
leo825...6 分钟前
Claude Code Skills 清单(本地)
java·python·ai编程
leoufung11 分钟前
LeetCode 76:Minimum Window Substring 题解与滑动窗口思维详解
算法·leetcode·职场和发展
NGSI vimp13 分钟前
Java进阶——如何查看Java字节码
java·开发语言
小O的算法实验室25 分钟前
2026年IEEE TETCI,山区环境下基于双种群进化的协同无人机巡逻任务协同优化,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
生成论实验室1 小时前
《事件关系阴阳博弈动力学:识势应势之道》第二篇:阴阳博弈——认知的动力学基础
数据结构·人工智能·科技·神经网络·算法
风筝在晴天搁浅1 小时前
字节高频题 小于n的最大数
算法
LabVIEW开发1 小时前
LabVIEW水力机组空蚀在线监测
算法·labview·labview知识·labview功能·labview程序