题解 | #二叉搜索树的第k个节点#

二叉搜索树的第k个节点

https://www.nowcoder.com/practice/57aa0bab91884a10b5136ca2c087f8ff

import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 *   public TreeNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param proot TreeNode类
     * @param k int整型
     * @return int整型
     */
    public int KthNode (TreeNode proot, int k) {
        // write code here
        if (proot == null) {
            return -1;
        } else {
            int left = getNum(proot.left, k);
            if (left == 1) {
                return proot.val;
            } else if (left < 1) {
                return KthNode(proot.left, k);
            } else {
                return KthNode(proot.right, left - 1);
            }
        }
    }
    int getNum(TreeNode root, int k) {
        if (root == null) {
            return k;
        }
        int left = getNum(root.left, k);
        left--;
        return getNum(root.right, left);
    }
}

解题思想:

本题的思路主要是使⽤递归,由于⼆叉搜索树的每⼀个节点都⽐⾃⼰的左节点⼤,⽐⾃⼰的右节点⼩,那么如果求解第 k ⼩元素,我们不妨使⽤ k 不断减⼩,直到1的时候就是最⼩的元素。

#算法##算法笔记#
全部评论

相关推荐

昨天 20:43
西北大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务