leetcode oj java 230. Kth Smallest Element in a BST
2017-01-17 22:41
267 查看
一、问题描述:
Given a binary search tree, write a function
smallest element in it.
Note:
You may assume k is always valid, 1 ≤ k ≤ BST's total elements.
二。1、解决思路:
由于BST的左孩子节点的值都小于父节点,右孩子节点的值都大于父节点的特性,我们可以递归的去寻找K小的元素。
假设左子树的长度是length
如果 length + 1 = k 那么刚好是根节点的值
如果 length + 1 > k 那么结果在左子树中,还是寻找第k个。
如果
length + 1 < k 那么结果在右子树中,此时已经排除了左边的length+1 个,需要寻找k-(length+1)个。
附代码:
解决思路二:
中序遍历树,把结果存入list中,一旦list的长度大于K的时候就返回。然后取list的第k-1个值即可。
代码:
public static int kthSmallest(TreeNode root, int k) {
List<Integer> re = new ArrayList<Integer>();
bianli(root, re, k);
return re.get(k - 1);
}
public static List<Integer> bianli(TreeNode root, List<Integer> re, int k) {
if (root == null || re.size() > k) {
return re;
}
bianli(root.left, re, k);
re.add(root.val);
bianli(root.right, re, k);
return re;
}
Given a binary search tree, write a function
kthSmallestto find the kth
smallest element in it.
Note:
You may assume k is always valid, 1 ≤ k ≤ BST's total elements.
二。1、解决思路:
由于BST的左孩子节点的值都小于父节点,右孩子节点的值都大于父节点的特性,我们可以递归的去寻找K小的元素。
假设左子树的长度是length
如果 length + 1 = k 那么刚好是根节点的值
如果 length + 1 > k 那么结果在左子树中,还是寻找第k个。
如果
length + 1 < k 那么结果在右子树中,此时已经排除了左边的length+1 个,需要寻找k-(length+1)个。
附代码:
public static int kthSmallest(TreeNode root, int k) { if (root == null) { return 0; } int leftSize = count(root.left); if (k == leftSize + 1) { return root.val; } else if (k < leftSize + 1) { return kthSmallest(root.left, k); } else { return kthSmallest(root.right, k - leftSize - 1); } } public static int count(TreeNode root) { if (root == null) { return 0; } return 1 + count(root.left) + count(root.right); }
解决思路二:
中序遍历树,把结果存入list中,一旦list的长度大于K的时候就返回。然后取list的第k-1个值即可。
代码:
public static int kthSmallest(TreeNode root, int k) {
List<Integer> re = new ArrayList<Integer>();
bianli(root, re, k);
return re.get(k - 1);
}
public static List<Integer> bianli(TreeNode root, List<Integer> re, int k) {
if (root == null || re.size() > k) {
return re;
}
bianli(root.left, re, k);
re.add(root.val);
bianli(root.right, re, k);
return re;
}
相关文章推荐
- leetcode-java-230. Kth Smallest Element in a BST
- 230. Kth Smallest Element in a BST(Java)
- LeetCode OJ 230. Kth Smallest Element in a BST
- LeetCode-230. Kth Smallest Element in a BST (JAVA)二叉树第k小的数字
- 230. Kth Smallest Element in a BST LeetCode
- LeetCode 230. Kth Smallest Element in a BST 解题报告
- 【LeetCode】230. Kth Smallest Element in a BST (2 solutions)
- 230. Kth Smallest Element in a BST
- 230. Kth Smallest Element in a BST
- 230. Kth Smallest Element in a BST
- 230. Kth Smallest Element in a BST
- LeetCode 230. Kth Smallest Element in a BST(二叉搜索树中的第K个元素)
- 230. Kth Smallest Element in a BST
- [leetcode-230]Kth Smallest Element in a BST(java)
- LeetCode OJ 之 Kth Smallest Element in a BST(BST中的第k小元素)
- [leetcode] 230. Kth Smallest Element in a BST 解题报告
- leetcode 230. Kth Smallest Element in a BST
- (java) Kth Smallest Element in a BST
- LeetCode-230. Kth Smallest Element in a BST
- LeetCode 230. Kth Smallest Element in a BST