题解 | #二叉搜索树的第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的时候就是最⼩的元素。
#算法##算法笔记#