/** * 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); }}
补充一个python的实现:
1 class Solution: 2 def __init__(self): 3 self.l = list() 4 5 def preOrder(self,root): 6 if root != None: 7 self.preOrder(root.left) 8 self.l.append(root.val) 9 self.preOrder(root.right)10 11 def kthSmallest(self, root: TreeNode, k: int) -> int:12 self.preOrder(root)13 return self.l[k-1]