题解 | #二叉搜索树的第k个节点#

二叉搜索树的第k个节点

https://www.nowcoder.com/practice/57aa0bab91884a10b5136ca2c087f8ff

# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param proot TreeNode类 
# @param k int整型 
# @return int整型
#

class Solution:
    @staticmethod
    def KthNode_stack(proot:TreeNode,k:int):
        if not proot:
            return -1
        count = 0
        p = []
        while (len(p) != 0) or proot is not None:
            while proot:
                p.append(proot)
                proot = proot.left
            temp = p[-1]
            p.pop()
            count += 1
            if count == k:
                return temp.val
            proot = temp.right
        return -1

    def __init__(self) -> None:
        self.res = None
        self.count = 0

    def middleOrder(self, root, k):
        if not root or self.count > k:
            return
        # 先向左 最左边先计数
        self.middleOrder(root.left,k)
        self.count += 1
        if self.count == k:
            self.res = root
        self.middleOrder(root.right,k)

    def KthNode(self , proot: TreeNode, k: int) -> int:
        # write code here
        self.middleOrder(proot,k)
        if self.res:
            return self.res.val
        else:
            return -1

全部评论

相关推荐

03-26 19:49
吉林大学 Java
elliot19:确实是这样,上次就纯聊天,问项目实习做啥,最后掏了一道非hot100的hard第二天挂,今晚复活重新一面
查看6道真题和解析
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务