安全プランを証明するために - k個の小型のバイナリ検索ツリーノード

タイトル説明

二分探索木を考えると、その中の最初のk小さいノードを検索してください。例えば、(5,3,7,2,4,6,8)と、第3の接続点に係る数値は、4要約です。

思考

実際には、トラバース配列、k番目のノード横断

# -*- coding:utf-8 -*-
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:
    def KthNode(self, root, k):
        #相当于中序遍历,遍历到的第k个点
        if k<=0 or not root:
            return None
        
        index = 0
        nodes = []
        while 1:
            while 1:
                while root.left:
                    nodes.append(root)
                    root = root.left
                index += 1
                if index == k:
                    return root
                if root.right:
                    root = root.right
                else:
                    break
            if len(nodes)>0:
                root = nodes.pop()
                index += 1
                if index == k:
                    return root
                while root.right == None and len(nodes)>0:
                    root = nodes.pop()
                    index += 1
                    if index == k:
                        return root
                if root.right:
                    root = root.right
                else:
                    break
            else:
                break
        return None

 

公開された82元の記事 ウォンの賞賛2 ビュー4344

おすすめ

転載: blog.csdn.net/qq_22498427/article/details/104983098