230 二叉搜尋樹中第K小的元素

2021-10-20 03:50:32 字數 1519 閱讀 3979

230. 二叉搜尋樹中第k小的元素

二叉搜尋樹的中序遍歷是有序(公升序)的,利用這個性質。

左子樹節點值均比根節點值小,右子樹節點值均比根節點值大。這是解題思路的**。

左右子樹均保持性質1。

# definition for a binary tree node.

# class treenode:

# def __init__(self, val=0, left=none, right=none):

# self.val = val

# self.left = left

# self.right = right

class

solution

:# ptr = 0

defkthsmallest

(self, root: treenode, k:

int)

->

int:

"""

二叉搜尋樹的中序遍歷是有序(公升序)的,利用這個性質。

內部函式使用到k和返回結果,需要全域性變數,因此self.k = k; self.res = none

"""self.k = k

self.res =

none

definorder

(root: treenode)

-> list[

int]

:if root is

none

:return

inorder(root.left)

self.k -=

1if self.k ==0:

self.res = root.val

inorder(root.right)

inorder(root)

return self.res

defkthsmallest1

(self, root: treenode, k:

int)

->

int:

# 二叉搜尋樹的中序遍歷是有序(公升序)的,利用這個性質即可

definorder

(root: treenode)

-> list[

int]

:if root is

none

:return

return inorder(root.left)

+[root.val]

+ inorder(root.right)

return inorder(root)

[k -

1]

上面演算法最壞情況每個節點遍歷一遍,時間複雜度o(n)。

乙個高效的優化思路:在每個bst樹的節點中維護排名,這樣可以直接比較排名,時間複雜度o(logn)。

手把手刷二叉搜尋樹(第一期)

官方題解

230 二叉搜尋樹中第K小的元素

給定乙個二叉搜尋樹,編寫乙個函式 kthsmallest 來查詢其中第 k 個最小的元素。說明 你可以假設 k 總是有效的,1 k 二叉搜尋樹元素個數。基本上就是中序遍歷 definition for a binary tree node.class treenode object def init...

230 二叉搜尋樹中第K小的元素

難度 中等 題目描述 思路總結 偷個小懶,用中序遍歷出二叉搜尋樹的序列,然後直接返回下標。題解一 definition for a binary tree node.class treenode def init self,x self.val x self.left none self.right...

230 二叉搜尋樹中第K小的元素

題目 給定乙個二叉搜尋樹,編寫乙個函式 kthsmallest 來查詢其中第 k 個最小的元素。說明 你可以假設 k 總是有效的,1 k 二叉搜尋樹元素個數。先是自己寫的糟糕的演算法 然後是官方的迭代演算法,可以在找到之後就不再查詢,降低了時間空間複雜度 class solution root st...