面試題54 二叉樹的第k大節點

2022-09-18 06:27:33 字數 790 閱讀 4914

給定一棵二叉搜尋樹,請找出其中第k大的節點。

示例 1:

輸入: root = [3,1,4,null,2], k = 13/

1 4

2輸出: 4

示例 2:

輸入: root = [5,3,6,2,4,null,null,1], k = 35/

3 6

/ 2 4/1

輸出: 4

限制:1 ≤ k ≤ 二叉搜尋樹元素個數

解法:二叉搜尋樹中序遍歷得到的結果是從小到大有序的,因此將左根右的中序遍歷轉換為右根左的遍歷,得到的結果就是從大到小的。

解法一:遞迴:

class solution 

public void helper(treenode node,int k)

helper(node.right,k);

if(++count == k)

helper(node.left,k);

}}

解法二:迭代

利用乙個棧,將根節點的右節點都壓入棧,彈出棧頂,如果棧頂的左子節點不為空,就將左子節點及左子節點的右子節點全部壓入棧,依次重複這個過程,直到棧為空為止。

訪問的順序就是右根左。

class solution2 

treenode node = help.pop();

if(++count == k)

root = node.left;

}return ans;

}}

54 二叉搜尋樹的第k大節點

給定一棵二叉搜尋樹,請找出其中第k大的節點。示例 1 輸入 root 3,1,4,null,2 k 1 3 1 4 2 輸出 4 示例 2 輸入 root 5,3,6,2,4,null,null,1 k 3 5 3 6 2 4 1輸出 4限制 題解 中文力扣中的題意和書上的不太一致,書上是輸出從小到...

54 二叉搜尋樹的第k大節點

給定一棵二叉搜尋樹,請找出其中第k大的節點。示例 1 輸入 root 3 1,4 null,2 k 13 1 4 2輸出 4 示例 2 輸入 root 5 3,6 2,4 null,null,1 k 35 3 6 24 1輸出 4限制 二叉搜尋樹的中序遍歷就是有序的,故中序遍歷後取出倒數第k個元素即...

二叉樹的第K大節點

給定一棵二叉搜尋樹,請找出其中的第k小的結點。例如,5,3,7,2,4,6,8 中,按結點數值大小順序第三小結點的值為4。思路 遞迴的思路,返回一次k減小1.struct treenode class solution treenode res kthnodecore proot,k return ...