美文网首页
给定一个数组,判断其实否为二叉搜索树的后序遍历(Java)

给定一个数组,判断其实否为二叉搜索树的后序遍历(Java)

作者: dreamsfuture | 来源:发表于2018-03-15 10:42 被阅读0次

    实现的思想

    后序遍历的特点:根在最后输出
    二叉搜索树的特点:根的值大于左子树值,小于右子树值

    算法实现:
    ① 后序遍历数组最后面的值为整棵树的根root
    ② 遍历数组找到当前值比根root小并且后一个值大于根root的索引
    ③ 若数组为后续遍历,则索引后面的值都应该大于根root,若找到小于根root,则返回false
    ④ 若第③步不为false则递归的形参更新为左右子树数组索引继续重复②和③步骤。

    public class Main   
    {  
        public static void main(String[] args)  
        {  
            //int[] arr={5,7,6,9,11,10,8};  
            int[] arr={4,7,5,9,13,11,8}; 
           
            System.out.println(isProOfBST(arr,0, arr.length-1));  
        }  
        public static boolean isProOfBST(int[] arr,int left, int end)   
        {  
            if(arr == null || left > end)  return false;  
            int root = arr[end];//后序遍历的最后一个为根节点  
            int i = left;  
            while(arr[i] < root && i < end)//找到左树的个数  
                i++;  
            int j = i;//先看右树中是否有非法数字,即比根节点小的数字  
            while(j < end)  
            {  
                if(arr[j] < root) return false;  
                j++;  
            }  
            if(i == end) return true;  //如果寻找结果发现最后只有左右叶子节点,则返回true
            return isProOfBST(arr, left, i-1) && isProOfBST(arr, i, end-1);
        }     
    }  
    

    相关文章

      网友评论

          本文标题:给定一个数组,判断其实否为二叉搜索树的后序遍历(Java)

          本文链接:https://www.haomeiwen.com/subject/lbvfqftx.html