二叉搜索树的第k个结点
题目
给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。
方法
类似于Leetcode 230. 二叉搜索树中的第k小元素,与本题目的不同之处在于k不能保证是有效的,且返回的是结点,而不是结点的元素值。
无效的情况:
- 二叉树是空树
- $k \leq 0$
- $k>nums_of_nodes_in_tree$
左子树的所有结点的数值都小于root,右子树的所有结点的数值都大于root。即,当k刚好等于左结点数量+1,那么第k小的元素刚好是root的数值。
否则的话,递归调用主函数,在根结点的左子树或右子树继续进行搜索。
1 | # -*- coding:utf-8 -*- |
1 | # -*- coding:utf-8 -*- |
1 | # -*- coding:utf-8 -*- |