剑指offer18-二叉搜索树的后续遍历

190 阅读1分钟

二叉搜索树的后续遍历

题目描述

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。

思路1

  • 递归
程序
    /**
     * code1
     * 时间复杂度:O(),空间复杂度:O()
     */
import java.util.*;
public class Solution {
    public boolean VerifySquenceOfBST(int [] sequence) {
        if(sequence==null||sequence.length<=0){
            return false;
        }
        //在二叉搜索树中左子树节点的值小于根节点的值
        int i=0;
        for(;i<sequence.length-1;i++){
            if(sequence[i]>sequence[sequence.length-1])
                break;
        }
        
        //在二叉搜索树中右子树节点的值大于根节点的值
        int j=i;
        for(;j<sequence.length-1;j++){
            if(sequence[j]<sequence[sequence.length-1])
                return false;
        }
        
        //判断左子树是不是二叉搜索树
        boolean left = true;
        if(i>0)
            left=VerifySquenceOfBST(Arrays.copyOfRange(sequence,0,i));
        
        //判断右子树是不是二叉搜索树
        boolean right= true;
        if(i<sequence.length-1)
            right=VerifySquenceOfBST(Arrays.copyOfRange(sequence,i,sequence.length-1));
        
        return left&&right;
    }
}

二叉搜索树(二叉排序树、二叉查找树)

  • 若它的左子树不空,则左子树上所有的节点值均小于它的根节点的值;
  • 若它的右子树不空,则右子树上所有的节点值均大于它的根节点的值;
  • 它的左、右子树也分别为二叉搜索树。