美文网首页
二叉搜索树的第k个节点

二叉搜索树的第k个节点

作者: Max_7 | 来源:发表于2019-03-06 14:10 被阅读0次

    题目描述

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

    思路

    这里先指明题目中蕴含的一个特点,二叉搜索书的中序遍历的顺序就是从小到大的排序顺序。
    一个很简单的思路就是先把树中序遍历,然后取第k个值。
    边界情况要分别注意k过小(为0)和过大(超过树的大小)。
    针对树很大的情况,可以在每次向遍历结果中加入节点时判断一下是否是第k个。可以提前终止遍历。

    代码

    class Solution:
        # 返回对应节点TreeNode
        def KthNode(self, pRoot, k):
            if k == 0:
                return None
            stack = []
            root = pRoot
            result = []
            while stack or root:
                while root:
                    stack.append(root)
                    root = root.left
                node = stack.pop()
                result.append(node)
                if len(result) == k: #如果树很大,可以提前终止遍历
                    return node
                root =node.right
            if k>len(result):
                return None
            return result[k-1]
    

    相关文章

      网友评论

          本文标题:二叉搜索树的第k个节点

          本文链接:https://www.haomeiwen.com/subject/txrtpqtx.html