[剑指Offer]二叉搜索树的后续遍历序列
2014-06-04 10:27
387 查看
题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果,如果是返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。解题思路
二叉搜索树的定义:二叉查找树(Binary Search Tree),或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。
如下图:
通过定义我们知道,在后序遍历得到的二叉搜索树序列中,最后一个数字时数的根节点的值。数组中前面的数字分为两部分:第一部分是左子树的节点的值,它们均比根节点的值小;第二部分是右子树的节点的值,它们均比根节点的值大。
因此,我们可以通过递归来解决本题。
代码
public static boolean verifySquenceOfBST(int[] sequence,int start,int end) { if(sequence == null || sequence.length==0 || end < start){ return false; } int root = sequence[end];//end = sequence.length - 1; int i,j; boolean isLeftOfBST = true,isRightOfBST = true; //在二叉搜索树中左子树的节点小于根节点 for(i = start;i < end;i++){ if(sequence[i] > root){ break; } } //在二叉搜索树中右子树的节点大于根节点 for(j = i;j < end;j++){ if(sequence[j] < root){ return false; } } //递归判断二叉搜索树中左子树是否是二叉搜索树 if(i > start){ isLeftOfBST = verifySquenceOfBST(sequence,start,i - 1); } //递归判断二叉搜索数中右是否是二叉搜索树 if(i < end){ isRightOfBST = verifySquenceOfBST(sequence,i,end-1); } return isLeftOfBST&&isRightOfBST; }
相关文章推荐
- 剑指offer 二叉搜索树后续遍历序列 判断
- 剑指offer:二叉搜索树的后序遍历序列(判断一个数组是否是二叉搜索树的后续遍历序列)
- 剑指Offer之 - 二叉搜索树的后续遍历序列
- 【剑指Offer】面试题24:二叉搜索树的后续遍历序列
- 剑指offer-二叉搜索树的后续遍历序列
- 剑指offer——二叉搜索树的后续遍历序列
- 剑指offer面试题 二叉搜索树的后续遍历序列
- 剑指Offer--二叉搜索树的后续遍历序列
- 剑指offer——二叉搜索树的后续遍历序列
- 剑指offer 4.3 举例形象化问题4-二叉搜索树的后续遍历序列
- 剑指offer-题24:二叉搜索树的后续遍历序列
- 剑指offer 面试题24 判断二叉搜索树后续遍历序列
- 剑指Offer 面试题33:二叉搜索树的后序遍历序列 Java代码实现
- 剑指offer--二叉搜索树的后序遍历序列
- 【剑指offer】二叉搜索树的后序遍历序列
- 【剑指Offer面试编程题】题目1367:二叉搜索树的后序遍历序列--九度OJ
- 剑指offer---二叉搜索树的后序遍历序列
- 码农小汪-剑指Offer之21-二叉搜索树的后序遍历序列
- 剑指offer刷题之java实现的二叉搜索树的后序遍历序列
- 剑指Offer--024-二叉搜索树的后序遍历序列