程序员代码面试指南刷题--第三章.根据后序数组重建搜索二叉树

题目描述
给定一个有 n 个不重复整数的数组 arr,判断 arr 是否可能是节点值类型为整数的搜索二叉树后序遍历的结果。
输入描述:

第一行一个整数 n,表示数组的长度。

第二行 n 个整数 arr_i。

输出描述:

如果是搜索二叉树后序遍历的结果则输出 “true”,否则输出 “false”。

示例1

输入

3
1 3 2
3 0 0 
2 0 0

输出

true

解法一:递归

**思路:**左边比中间大,右边比中间小

import java.io.*;
import java.util.*;
public class Main{
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        br.readLine();
        String[] ss = br.readLine().trim().split(" ");
        int[] arr = new int[ss.length];
        for(int i=0;i<arr.length;i++){
            arr[i] = Integer.parseInt(ss[i]);
        }
        boolean res = judge(arr,0,arr.length-1);
        System.out.println(res);
    }
    public static boolean judge(int[] arr,int l,int r){
        if(arr==null||r-l+1<3) return true;
        int midnum = arr[r];
        int i = l;
        while(i<r&&arr[i]<midnum){
            i++;
        }
        int right = i;        
        while(i<r&&arr[i]>midnum){
            i++;
        }
        if(i!=r) return false;
        if(right==l||right==r) return judge(arr,l,r-1);
        return judge(arr,l,right-1)&&judge(arr,right,r-1);
    }
}

另外假如已知是后序,也可以利用上述方法重建二叉树,不需要中序也行可以直接求出来

发布了189 篇原创文章 · 获赞 8 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_44406146/article/details/105574093