二叉搜索树的后序遍历路径

题目描述:

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


解法:

二叉树的后序遍历顺序:
左-右-根
对应到数组中的元素可得最后一个元素为根元素
根据二叉搜索树的特性,大于根元素的部分为右子树,小于根元素的部分为左子树
然后可以递归判断左右子树(因为左右子树又分别为二叉搜索树)

public class Solution {
   public boolean VerifySquenceOfBST(int [] sequence) {
       if(sequence.length==0) return false;
       return judge(sequence,0,sequence.length-1);
   }
   
   public boolean judge(int[] arr,int left,int right){
       if(left>=right) return true;
       int i = right;
       //右子树的值都大于根节点的值,左子树的值都小于根节点的值
       while(i>left && arr[i-1]>arr[right]) i--;
       for(int j=i-1;j>=left;j--){
           //如果左子树的值大于根节点的值,代表该数组不是二叉搜索树的后序遍历结果,直接返回false
           if(arr[j]>arr[right]){
               return false;
           }
       }
       //递归判断左右子树
       return judge(arr,left,i-1) && judge(arr,i,right-1);
   }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容