剑指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);//如果根节点的左子树和右子树都是二叉搜索树,则整棵树是二叉搜索树
}
}
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);//如果根节点的左子树和右子树都是二叉搜索树,则整棵树是二叉搜索树
}
}
相关文章推荐
- 剑指offer(12)-二叉搜索树的后序遍历序列
- 剑指Offer:面试题24——二叉搜索树的后序遍历序列(java实现)
- 剑指offer:二叉搜索树的后序遍历序列
- 《剑指offer》编程题java实现(二十七):二叉搜索树的后序遍历序列
- 剑指offer面试题24 二叉搜索树的后序遍历序列
- 《剑指Offer》读书笔记---面试题24:二叉搜索树的后序遍历序列
- 二叉搜索树的后序遍历序列(剑指offer)
- 剑指offer:二叉搜索树的后序遍历序列(java)
- 剑指Offer—23—二叉搜索树的后序遍历序列
- 二叉搜索树的后序遍历序列(剑指offer)
- 剑指offer---二叉搜索树的后序遍历序列
- 剑指offer——二叉搜索树的后序遍历序列(思路不错)
- 剑指Offer—编程题24(二叉搜索树的后序遍历序列)
- 《剑指offer》二叉搜索树的后序遍历序列
- 《剑指offer》——二叉搜索树的后序遍历序列
- 剑指offer——判断一个序列是否为二叉搜索树的后序遍历
- 面试题24_二叉搜索树的后序遍历序列
- 二叉搜索树的后序遍历序列
- 剑指offer: 二叉搜索树的后序遍历序列
- 剑指OFFER之从二叉搜索树的后序遍历序列(九度OJ1367)