演算法 二叉搜尋樹的第k個結點

2022-09-05 06:33:13 字數 1108 閱讀 9789

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

使用棧儲存資料,迴圈比較資料和棧裡面資料大小,大於就出棧,一直找到當前資料應該呆的位置,然後再將出棧的資料放回來。

private

static treenode kthnode

(treenode proot,

int k)

stack

stack =

newstack

<

>()

;recursive

(proot, k, stack);if

(stack.

size()

< k)

return stack.

get(k -1)

;}private

static

void

recursive

(treenode node,

int k, stack

stack)

// 儲存臨時出棧的節點

stack

tempstack =

newstack

<

>()

;// 找位置:依次比較當前節點值和棧裡已經有的值 小於就出棧

for(

int i = stack.

size()

; i >

0&& node.val < stack.

peek()

.val; i--

)// 入棧

stack.

push

(node)

;// 將出棧的資料再放回來

for(

int i = tempstack.

size()

; i >

0&& stack.

size()

< k; i--

)// 遞迴

recursive

(node.left, k, stack)

;recursive

(node.right, k, stack)

;}

二叉搜尋樹第k個結點

題目描述 給定一顆二叉搜尋樹,請找出其中的第k大的結點。例如,5 3 7 2 4 6 8 中,按結點數值大小順序第三個結點的值為4。這個題目考慮到可以用中序遍歷求解,因為中序遍歷是搜尋二叉樹的從大到小的順序,對二叉樹進行中序遍歷,每次經過結點k值減一,一直到k值等於1,對應的結點就是要尋找的點,這個...

二叉搜尋樹的第k個結點

二叉搜尋樹的第k個結點 題目描述 給定一顆二叉搜尋樹,請找出其中的第k大的結點。例如,5 3 7 2 4 6 8 中,按結點數值大小順序第三個結點的值為4。思路 二叉搜尋樹為關鍵字排序 左子樹 根 右子樹 二叉樹的中序遍歷的訪問順序為 左子樹 根 右子樹 故找出二叉搜尋樹中第k大的節點實質為找出中序...

二叉搜尋樹的第k個結點

給定一棵二叉搜尋樹,請找出其中的第k小的結點。例如,5,3,7,2,4,6,8 中,按結點數值大小順序第三小結點的值為4。時間限制 1秒 空間限制 32768k 熱度指數 146968 中序遍歷二叉搜尋樹得到的則為乙個有序的陣列。因此,通過中序遍歷二叉搜尋樹則可得到結果 struct treenod...