牛客网-Python-二叉搜索树的第k个节点

题目描述

给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8)    中,按结点数值大小顺序第三小结点的值为4。

思路

二叉搜索树的中序遍历是一个递增数列。因此在中序遍历的过程中计数即可找到第k小的节点。

代码

# -*- 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
        if not pRoot:
            return None
        if k<=0:
            return
        count = 0
        stack = []
        root = pRoot
        while stack or root!=None:
            #节点不空,不断加左节点
            while root:
                stack.append(root)
                root = root.left
            root = stack.pop()
            count += 1
            if count == k:
                return root
            #***********这里不能判断右子树不空。空子树是出栈的时间!
            root = root.right

我没用递归做,leileleile

posted @ 2020-02-12 20:03  ditingz  阅读(335)  评论(0编辑  收藏  举报