题目:给定一棵二叉搜索树,请找出其中第K大/第k小的节点。
二叉搜索树:根节点的值大于其左子树中任意一个节点的值,小于其右节点中任意一节点的值,这一规则适用于二叉查找树中的每一个节点。
如图:
思路:利用二叉搜索树特性,栈。
代码:
# class root_tree:# def f(self , root):# self.root = root# self.left = root.left# self.right = root.rightclass Solution: def func_max(self , root , k): stack = [] ans = root while stack or root: while root: stack.append(root) root = root.right root = stack.pop() k -= 1 ans = root root = root.left if k == 0: return ans def func_min(self , root , k): stack = [] res = root while stack or root: while root: stack.append(root) root = root.left root = stack.pop() k -= 1 res = root root = root.right if k == 0: return res