点击上方蓝字,关注并星标,和我一起学技术.
题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。
树节点的定义
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
思路
这道题是树的后续遍历,也是一道属于简单类型的题目。sequence=[1,3,2,5,7,6,4]
如上图二叉搜索树
- rootValue = sequence[end] = 4 是根节点的值,找到数组中左右子树分界处即2与5中间。
- 然后判断右子树是否小于rootValue,小于则返回false。否则进行第三步。
- 左右子树递归的执行第一步,第二步。
public class Solution {
public boolean helper(int [] sequence, int start , int end){
if( start >= end )
return true;
// 根节点的值
int key = sequence[end];
int index = start;
// 找到左右子树的分界点index
for(; index if(sequence[index] > key)
break;
}
// 右子树中有小于根节点的返回false
for(int j = index; j if(sequence[j] return false;
}
//左右子树的分界点又是两颗二叉树搜索树,递归调用helpVerify即可
return helper(sequence, start, index - 1) && helper(sequence, index, end - 1);
}
public boolean VerifySquenceOfBST(int [] sequence) {
if( sequence == null || sequence.length == 0)
return false;
return helper(sequence, 0 ,sequence.length - 1);
}
}