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