/** * Definition for a binary tree node. * public class TreeNode { * public int val; * public TreeNode left; * public TreeNode right; * public TreeNode(int x) { val = x; } * } */ public class Solution { public int KthSmallest(TreeNode root, int k) { int count = countNodes(root.left); if (k <= count) { return KthSmallest(root.left, k); } else if (k > count + 1) { return KthSmallest(root.right, k - 1 - count); // 1 is counted as current node } return root.val; } public int countNodes(TreeNode n) { if (n == null) return 0; return 1 + countNodes(n.left) + countNodes(n.right); } }
https://leetcode.com/problems/kth-smallest-element-in-a-bst/#/description
补充一个python的实现,使用二叉树的中序遍历:
1 class Solution: 2 def __init__(self): 3 self.l = list() 4 5 def inOrder(self,root): 6 if root != None: 7 self.inOrder(root.left) 8 self.l.append(root.val) 9 self.inOrder(root.right) 10 11 def kthSmallest(self, root: TreeNode, k: int) -> int: 12 self.inOrder(root) 13 return self.l[k-1]