此题要查找二叉搜索树中第n小的节点,可以应用二叉搜索树的中序遍历,因为中序遍历就是将二叉搜索树所有节点由小到大进行排序,所以只需要将中序遍历之后的所有元素存入列表,并输出列表中的第n-1个元素,即可完成题目要求。
解析代码如下:
# 资源包\Code\chapter19\1937.py # 二叉搜索树的节点 class TreeNode: def __init__(self, val): # 节点的值 self.val = val # 左子树 self.left = None # 右子树 self.right = None class nNodeSearch: # 返回第n小的节点 def nthNode(self, pRoot, n): # 用于存储二叉搜索树按照中序遍历后的元素 result = [] # 如果当前节点为空,则返回None if not pRoot: return None result = self.mid(pRoot, result) # 如果要查找的节点大于遍历后的长度或小于0,则返回None if n > len(result) or n <= 0: return None # 返回查找的第n小的节点 return result[n - 1] # 中序遍历算法 def mid(self, pRoot, result): if pRoot: # 遍历左子树节点 self.mid(pRoot.left, result) # 将中序遍历结果存入result result.append(pRoot) # 遍历右子树节点 self.mid(pRoot.right, result) return result # 创建二叉搜索树,根节点为10,左子树为6,右子树为15,右子树的左子树为11,右子树的右子树为20 root = TreeNode(10) left = TreeNode(6) right = TreeNode(15) root.left = left root.right = right right_left = TreeNode(11) right_right = TreeNode(20) right.left = right_left right.right = right_right # 查找第3小的节点 print(nNodeSearch().nthNode(root, 3).val)
还没有评论,来说两句吧...