📅  最后修改于: 2023-12-03 15:42:16.572000             🧑  作者: Mango
门| GATE-CS-2007 |第 74 题
这是 GATE 计算机科学考试中的一道编程题,题目要求实现一个二叉树的前序遍历函数,并返回其中的第 k 个元素。该题需要熟悉二叉树的基本概念和前序遍历算法的实现。
给定一个二叉树和一个整数 k,实现一个函数,返回这个二叉树的前序遍历中第 k 个元素的值。
函数的输入参数为一个二叉树的根节点指针和一个整数 k。
返回值为一个整数,表示前序遍历中第 k 个元素的值。
Input:
1
/ \
2 3
/ \
4 5
k = 2
Output: 2
前序遍历算法的实现是通过递归来实现的,首先访问根节点,然后递归遍历左子树和右子树。因此,我们可以先递归遍历左子树,再递归遍历右子树,最后返回第 k 个元素的值。
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Solution:
def kthSmallest(self, root: TreeNode, k: int) -> int:
self.k = k
self.res = 0
def traverse(node):
if not node:
return
traverse(node.left)
self.k -= 1
if self.k == 0:
self.res = node.val
return
traverse(node.right)
traverse(root)
return self.res
该算法对二叉树进行了一次前序遍历,时间复杂度为 O(n),其中 n 为二叉树的节点数。由于算法使用了递归,需要额外的空间来保存栈帧,空间复杂度为 O(h),其中 h 为二叉树的高度。