二叉搜索树中的第k个结点Python
给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。
思路:根据题目,遍历之后第三个结点是4,我们可以先看看各个遍历的结果
前序遍历:根左右 5 3 2 4 7 6 8
中序遍历:左根右 2 3 4 5 6 7 8
后序遍历:左右根 2 4 3 6 8 7 5
所以我们需要在类内定义一个方法,用于对结点进行中序遍历,需要用到递归的思想,同时要一个list记录结点,只记录根节点,不断递归的结果,最后每个叶子节点都是根节点,就可以添加到list中。特殊情况:空结点
在主方法中,我们需要对k进行判断,k小于0或者大于结点的长度,都是没有意义的
其它情况,我们需要返回第k个结点元素
中序遍历方法的调用需要在判断之前完成,同理list在主方法以及遍历方法中都要用到,并且它们都是同一个意思,list是一个全局变量,需要提前定义
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
# 返回对应节点TreeNode
def KthNode(self, pRoot, k):
# write code here
global a
a=[]
self.midnode(pRoot)
if k<=0 or k>len(a):
return None
else:
return a[k-1]
def midnode(self,root):
if not root:
return None
self.midnode(root.left)
a.append(root)
self.midnode(root.right)

浙公网安备 33010602011771号