您的位置:首页 > Web前端

剑指offer-----二叉搜索树的后序遍历序列

2018-02-05 15:11 351 查看

1、题目描述

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

2、思路

在后序遍历序列中,最后一个值是树的根节点,前面一部分结点是根的左子树;左子树后面,根节点前面是根的右子树。依次递归判断左子树和右子树是不是二叉搜索树。

3、代码如下

import java.util.Arrays;

public class Solution {

    public boolean VerifySquenceOfBST(int [] sequence) {

        int length = sequence.length;

        if(length <= 0){//如果后序遍历序列不存在,则返回false

            return false;

        }

        int root = sequence[length -1];//后序遍历序列对应树的根节点为序列的最后一个节点

        int i = 0;

        for(;i<length-1;i++){//所有小于根节点的节点是该根节点的左子树

            if(sequence[i] > root){

                break;

            }

        }

        int j = i;

        for(;j<length-1;j++){//所有大于根节点的节点是该根节点的右子树,如果有小于根节点的节点,则不是二叉搜索树

            if(sequence[j] < root){

                return false;

            }

        }

        boolean left = true;

        if(i > 0){//如果存在左子树

            left = VerifySquenceOfBST(Arrays.copyOfRange(sequence,0,i));//判断左子树是不是二叉搜索树

        }

        boolean right = true;//如果没有右子树,直接返回true

        if(i<sequence.length - 1){

            right = VerifySquenceOfBST(Arrays.copyOfRange(sequence,i,length-1));//判断右子树是不是二叉搜索树

        }

        return (left&&right);//如果根节点的左子树和右子树都是二叉搜索树,则整棵树是二叉搜索树

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: