【劍指offer】62.二叉搜索樹的第k個結點

問題描述

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

思路

二叉搜索樹的中序遍歷是有序序列。我們可以把二叉搜索樹的中序遍歷讀到一個arrayList, 直接返回對應的值。(方法一)
也可以進行中序遍歷,設置一個index, 如果index增長到k, 則返回。(方法二)

方法一

import java.util.*;
public class Solution {
    ArrayList<TreeNode> mem = new ArrayList<>();
    TreeNode KthNode(TreeNode pRoot, int k){
        initMem(pRoot);
        return 0<k && k<=mem.size()?mem.get(k-1):null;
    }
    private void initMem(TreeNode root){
        if(root == null) return;
        initMem(root.left);
        mem.add(root);
        initMem(root.right);
    }
}

方法二

import java.util.*;
public class Solution {
    int index;
    int k;
    TreeNode KthNode(TreeNode pRoot, int k){
        this.k = k;
        return initMem(pRoot);
    }
    private TreeNode initMem(TreeNode root){
        if(root == null) return null;
        TreeNode left = initMem(root.left);
        if(left != null) return left;
        if(++index == k) return root;
        return initMem(root.right);
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章