劍指offer:給定一棵二叉搜尋樹,請找出其中的第k小的結點。
劍指offer演算法題
樹
題目描述
給定一棵二叉搜尋樹,請找出其中的第k小的結點。
題目分析
由於給定的是一顆二叉搜尋樹,而對於二叉搜尋樹來說,其中序遍歷的結果就是該樹升序排序後的結果。所以我們可以對該樹進行中序遍歷,然後找到第k個即可。
方法一 遞迴
下面是Java程式碼
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
//設定兩個全域性變數,一個用於計數,一個用於儲存找到的節點。
private int i =0;
private TreeNode node = null;
TreeNode KthNode(TreeNode pRoot, int k)
{
if(pRoot == null){
return null;
}
if(k <=0){
return null;
}
KthNode(pRoot.left,k);
i++;
if(i == k){
node = pRoot;
}
KthNode(pRoot.right,k);
return node;
}
}
方法二 非遞迴
下面是Java程式碼
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
import java.util.Stack;
public class Solution {
TreeNode KthNode(TreeNode pRoot, int k)
{
if(pRoot == null){
return null;
}
if(k <=0){
return null;
}
Stack<TreeNode> s = new Stack<>();
int count = 0;
while(!s.isEmpty()||pRoot!=null){
if(pRoot!=null){
s.push(pRoot); //直接壓棧
pRoot = pRoot.left;
}else{
TreeNode node = s.pop(); //出棧並訪問
if(++count == k){
return node;
}
pRoot = node.right;
}
}
return null;
}
}
相關文章
- 劍指 Offer 54. 二叉搜尋樹的第k大節點 mark
- 力扣 - 劍指 Offer 54. 二叉搜尋樹的第k大節點力扣
- 每日一題 - 劍指 Offer 54. 二叉搜尋樹的第k大節點每日一題
- 二叉搜尋樹的第 k 個結點
- [劍指offer] 二叉搜尋樹的後序遍歷序列
- 劍指 Offer 33. 二叉搜尋樹的後序遍歷序列
- 230. 二叉搜尋樹中第 K 小的元素
- 劍指offer:輸入n個整數,找出其中最小的K個數。
- LeetCode-230-二叉搜尋樹中第K小的元素LeetCode
- Leetcode230. 二叉搜尋樹中第K小的元素LeetCode
- 劍指offer——連結串列中倒數第k個結點
- 每日一練(26):二叉搜尋樹的第k大節點
- 劍指offer——重建二叉樹二叉樹
- 劍指offer——二叉樹的映象C++二叉樹C++
- 【劍指offer】27. 二叉樹的映象二叉樹
- 劍指offer——二叉樹的深度C++二叉樹C++
- 劍指Offer-40-二叉樹的深度二叉樹
- (python版)《劍指Offer》JZ57:二叉樹的下一個結點Python二叉樹
- 劍指offer(四)重建二叉樹二叉樹
- 劍指offer | 55 - I. 二叉樹的深度二叉樹
- 劍指 Offer 07. 重建二叉樹二叉樹
- 二叉搜尋樹的結構
- 是否同一棵二叉搜尋樹(25 分)
- 《劍指offer》之在完全二叉樹中新增子節點二叉樹
- 劍指offer-17:樹的子結構
- 二叉搜尋樹的2層結點統計
- 力扣 - 劍指 Offer 27. 二叉樹的映象力扣二叉樹
- 【劍指offer】5.二叉樹的映象和列印二叉樹
- 劍指offer:輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。二叉樹
- [劍指offer] 把二叉樹列印成多行二叉樹
- # 劍指 Offer 68 - II. 二叉樹的最近公共祖先二叉樹
- 劍指offer(java實現)第4題“重建二叉樹”-牛客網Java二叉樹
- 力扣 - 劍指 Offer 22. 連結串列中倒數第k個節點力扣
- leetcode 102 劍指Offer 32 二叉樹的層次遍歷LeetCode二叉樹
- 資料結構中的樹(二叉樹、二叉搜尋樹、AVL樹)資料結構二叉樹
- JZ-062-二叉查詢樹的第 K 個結點
- 劍指offer 面試題 7 :二叉樹的下一個節點是什麼?面試題二叉樹
- 【劍指offer】【4】根據前序和中序結果,重建二叉樹二叉樹