判断一个序列是否为某二叉搜索树的后续遍历结果
2017-07-25 10:16
381 查看
问题描述:输入一个整数数组,判断该数组是不是某个二叉搜索树的后续遍历结果。如果是返回true,不是返回false。假设输入的数组的任意两个数字互不相同。
分析:二叉搜索树的根节点的左子树值小于根节点,右子树值大于根节点。根节点位于序列的尾部。递归判断节点的左右子树是否为二叉搜索树的后续遍历。
代码如下:
package com.wyl.sequence; import java.util.Arrays; /** * 判断一个序列是否为某个二叉搜索树的后序遍历序列 * 思想:序列的最后一个值是树根节点的值,先遍历左子树,其值比根节点小,右子树的值比根节点大 * @author wyl * */ public class BinarySearchTree { /** * 判断序列是否为二叉搜索树的一个可能后续遍历 * @param sequence 待判断序列 * @param length 序列长度 * @return 序列是否为可能的后序遍历序列 */ public boolean verifyBST(int[] sequence, int length){ if(sequence == null || length <= 0){ 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; //左子树为1个节点 if(i>0){ left = verifyBST(sequence, i); } //判断左子树是否为二叉搜索树的后续遍历 boolean right = true;//右子树为1个节点 if(i<length-1){ int [] newData; //用来保存右子树 newData = Arrays.copyOfRange(sequence, i, length-1); right = verifyBST(newData, length-1-i); } if(left && right){ return true; } return false; } public static void main(String[] args) { BinarySearchTree bst = new BinarySearchTree(); int[] sequence = {5,7,6,9,12,11,8}; boolean b = bst.verifyBST(sequence, sequence.length); System.out.println(b); } }
相关文章推荐
- 剑指offer:二叉搜索树的后序遍历序列(判断一个数组是否是二叉搜索树的后续遍历序列)
- 算法--判断一个数字序列是否为二叉排序树的后续遍历
- 剑指offer解题报告(Java版)——判断一个数组是否是二叉搜索树的后序遍历序列 24
- 剑指offer24判断某一序列是否是某一搜索二叉树的后续遍历结果
- 判断序列是否是二叉查找树的后续遍历结果
- 判断一个数据序列是否是BST后序遍历的结果
- 判断一个序列是否时二叉排序树的后续遍历序列
- Solution 9: 判断序列是否为BST的后续遍历结果
- 输入一个数列,判断是否为某一个二叉搜索树的后序遍历序列
- 判断整数序列是否为二元查找树的后序遍历结果的解决方法
- 输入一个整数数组,判断该数组是不是某个二叉搜索树的前序遍历结果
- 判断一个数组是否是一棵树的后续遍历
- 判断给定的数组是否为二叉搜索树的后序遍历序列
- 判断二叉搜索树的后序遍历序列是否合法
- 剑指offer 二叉搜索树后续遍历序列 判断
- 判断整数序列是不是二元查找树的后续遍历结果
- 判断一个整数数组是不是二叉搜索树的后序遍历序列
- 关于序列的面试题1 ------------- 判断整数序列是否是二叉排序树的后续遍历
- 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果
- 由初始序列构造二叉搜索树,输出层次遍历,并判断是否是完全二叉树