二叉搜索樹找第K小的樹

百度面試題


題目描述:
給定一棵二叉搜索樹,請找出其中的第k小的結點。例如, (5,3,7,2,4,6,8) 中,按結點數值大小順序第三小結點的值爲4。

題目來源:牛客網
代碼實現(python2)

# -*- coding:utf-8 -*-
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:
    # 返回對應節點TreeNode
    flag = 0
    def KthNode(self, pRoot, k):
        # write code here
        node_list = []
        def middle_sort(pRoot,k):
            if not pRoot:
                return
            middle_sort(pRoot.left,k)
            node_list.append(pRoot)
            self.flag += 1
            if self.flag == k:
                return
            middle_sort(pRoot.right,k)
        middle_sort(pRoot,k)
        return node_list[k-1] if 0<k<=len(node_list) else None


題目解析
二叉搜索樹(BST:Binary Search Tree),又稱二叉查找樹。是一種特殊的二叉樹,它改善了二叉樹節點查找的效率。二叉查找樹有以下性質:
對於任意一個節點 n,
其左子樹(left subtree)下的每個後代節點(descendant node)的值都小於節點 n 的值;
其右子樹(right subtree)下的每個後代節點的值都大於節點 n 的值。
根據二叉搜索樹的性質可以得出:二叉搜索樹按照中序遍歷的順序打印出來正好就是排序好的順序。
所以只要中序遍歷二叉搜索樹,返回第k個結點即可。
代碼中做了一個小優化,引入flag,即當找到第k個結點時,停止遍歷,不再進行後續遍歷過程。


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章