SwordはOffer-59を参照します-バイナリ検索ツリーのK番目のノード

タイトル説明

二分探索木が与えられた場合、その中でk番目に小さいノードを見つけてください。たとえば、(5,3,7,2,4,6,8)では、3番目の小さいノードの値はノード値の順に4です。

アイデア分析

二分探索木の特徴は次のとおりです。左側のノードはルートノードよりも大きく、右側のノードはルートノードよりも小さくなります。
ミドルオーダートラバーサルの結果は次のとおりです。左-「ミドル-」右
2つの組み合わせは順序付けられたシーケンスです。

コード

import java.util.ArrayList;
/*
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }

}
*/
public class Solution {
    
    
    ArrayList<TreeNode> list = new ArrayList<>();
    TreeNode KthNode(TreeNode pRoot, int k)
    {
    
    
        KthHelper(pRoot);   
        if(k>=1&&k<=list.size()){
    
    
            return list.get(k-1);
        }
        return null;
    }
    //使用中序遍历:左 中 右
    void KthHelper(TreeNode root){
    
    
        if(root!=null){
    
    
        KthHelper(root.left);
        list.add(root);
        KthHelper(root.right);
        }
    }


}

おすすめ

転載: blog.csdn.net/H1517043456/article/details/107593418
おすすめ