剑指offer-python刷题-二叉搜索树的第k个结点

题目:给定一棵二叉搜索树,请找出其中的第k小的TreeNode结点。


二叉搜索树的特性:中序遍历后,单调递增。因此关键是写出二叉搜索树的中序遍历。

方法一:通过普通的循环写中序遍历。先把当前结点及其所有左叶结点逐个入栈,在逐个出栈,将其右叶结点入栈。

# -*- 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
        mid = self.mid_tree(pRoot)
        if not mid or k < 1 or k > len(mid):
            return None
        return mid[k-1]
    #中序遍历
    def mid_tree(self,pRoot):
        result = []
        tem_stack = []
        tem = pRoot
        while tem or tem_stack:
            while tem:
                tem_stack.append(tem)
                tem = tem.left
            node = tem_stack.pop()
            result.append(node)
            tem = node.right
        return result

方法二:利用递归的思想写遍历。

此方法需要注意的是在类中创建一个空列表(实例变量),通过递归的函数每次向该列表内添加结点。

# -*- 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
        self.myList = []
        self.mid_tree(pRoot)
        if not self.myList or k < 1 or k > len(self.myList):
            return None
        return self.myList[k-1]
    def mid_tree(self,pRoot):
        if not pRoot:
            return None
        self.mid_tree(pRoot.left)
        self.myList.append(pRoot)
        self.mid_tree(pRoot.right)


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值