给定一个二叉排序树和一个整数k,要求输出树中第k个最小元素(k从1开始计数)。 输入 第一行输入t,表示有t个测试样例。 第二行起,首先输入n,接着输入n个整数表示一个二叉排序树,接着输入k。 以此类推共输入t个测试样例。 数组形式的二叉树表示方法如下: 给定一个用于表示二叉树的一维数组,该数组长度为n。该数组是按照一种类似于层序遍历的方式表示二叉树的,用数字-1表示某个结点为空。 根据给定的一维数组,构建二叉树。 输出 每一行输出当前二叉排序树的第k个最小元素。 共输出t行。
时间: 2024-02-24 19:53:12 浏览: 71
这是一道比较经典的二叉搜索树问题,可以使用中序遍历的方式对二叉搜索树进行遍历,同时记录当前遍历到了第几个节点,如果当前节点是第k个节点,就返回该节点的值即可。下面是一个Python实现的代码示例:
```python
class TreeNode:
def __init__(self, val):
self.val = val
self.left = None
self.right = None
class Solution:
def kthSmallest(self, root: TreeNode, k: int) -> int:
stack = []
count = 0
node = root
while node or stack:
while node:
stack.append(node)
node = node.left
node = stack.pop()
count += 1
if count == k:
return node.val
node = node.right
if __name__ == '__main__':
t = int(input())
for _ in range(t):
n = int(input())
nums = list(map(int, input().split()))
k = int(input())
# 构建二叉搜索树
root = None
for num in nums:
if not root:
root = TreeNode(num)
else:
node = root
while True:
if num < node.val:
if not node.left:
node.left = TreeNode(num)
break
else:
node = node.left
else:
if not node.right:
node.right = TreeNode(num)
break
else:
node = node.right
# 查找第k个最小元素
solution = Solution()
print(solution.kthSmallest(root, k))
```
输入示例:
```
2
7 4 2 1 3 6 8
2
5 3 2 4 7 6 8
3
```
输出示例:
```
2
4
```
阅读全文