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

实现的思想

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

算法实现:
① 后序遍历数组最后面的值为整棵树的根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);
    }     
}  
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容