ソードフィンガーオファー33.二分探索木のポストオーダートラバーサルシーケンス---再帰

ソードフィンガーオファー33.二分探索木の注文後のトラバーサルシーケンス

配列のポストオーダートラバーサル:左サブツリー-右サブツリー-ルートノード

ルートノードを取得し、配列セグメントを左から右にトラバースし、配列セグメントをルートノードより大きい最初の要素のインデックス(k)で除算します。

右側のサブツリーにルートノードよりも小さい要素がある場合はFalse

class Solution {
    public boolean verifyPostorder(int[] postorder) {
        if(postorder==null || postorder.length==0)  return true;
        return function(postorder,0,postorder.length-1);
    }
    private boolean function(int[] arr,int i,int j){
        if(i>j) return true;
        int root=arr[j];
        int k=i;//k为大于根节点的第一个节点的下标
        for(;k<j;k++){
            if(arr[k]>root) break;
        }
        for(int a=k;a<j;a++){
            if(arr[a]<root) return false;
        }
        boolean m=true,n=true;
        if(k>i) m=function(arr,i,k-1);
        if(k<j-1) n=function(arr,k,j-1);
        return m&&n;
    }
}

 

おすすめ

転載: blog.csdn.net/qq_41041762/article/details/108083861