劍指offer:二叉搜索樹的第k個結點(中序遍歷)

1. 題目描述

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

2. 思路

中序遍歷二叉搜索樹,第K個就是結果java

3. 非遞歸

import java.util.*;

public class Solution {
    static TreeNode KthNode(TreeNode pRoot, int k){
        return inorderNR(pRoot, k);
    }

    public static TreeNode inorderNR(TreeNode pRoot, int k){
        int count = 0;
        Stack<TreeNode> s = new Stack<>();
        TreeNode curr = pRoot;
        while(curr != null || !s.empty()){
            while(curr != null){
                s.push(curr);
                curr = curr.left;
            }
            curr = s.pop();
            count++;
            if(count == k){
                break;
            }
            curr = curr.right;
        }
        return curr;
    }
}

4. 遞歸

import java.util.*;

public class Solution {
    TreeNode KthNode(TreeNode pRoot, int k){
        return inorderR(pRoot, k);
    }
    public int count = 0;//注意不能是靜態
    public TreeNode inorderR(TreeNode root, int k){
        if(root != null){
            //
            TreeNode left = inorderR(root.left, k);
            if(left != null) {return left;}
            //
            count ++;
            if(count == k) {return root;}
            //
            TreeNode right = inorderR(root.right, k);
            if(right != null) {return right;}
        }
        return null;
    }
}
相關文章
相關標籤/搜索