給定一棵二叉搜尋樹,請找出其中的第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...