题目描述:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出 Yes,否则输出 No。假设输入的数组的任意两个数字都互不相同。
思路:先找到右子树的开始位置,然后分别进行左右子树递归处理
//后序遍历二叉搜索树
/*输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结
果。如果是则输出 Yes,否则输出 No。假设输入的数组的任意两个数字都互不相
同。*/
public class Offer24 {
TreeNode root;
public boolean VerifySquenceOfBST(int[] sequence,int[] souce) {
if(sequence == null || sequence.length == 0) {
return false;
}
int[] newarr = jie(souce);
for(int i = 0;i < newarr.length;i++) {
if(newarr[i] != sequence[i]) {
return false;
}
}
return true;
}
//构建二叉树
public void add(int data) {
TreeNode cur = root;
TreeNode parent;
TreeNode newnode = new TreeNode(data);
if(root == null) {
root = newnode;
return;
}else {
while(true) {
parent = cur;
if(data > cur.data) {
cur = cur.right;
if(cur == null) {
parent.right = newnode;
return;
}
}else {
cur = cur.left;
if(cur == null) {
parent.left = newnode;
return;
}
}
}
}
}
int[] arr;
public int[] jie(int[] souce) {
arr = new int[souce.length];
for(int i = 0;i < souce.length;i++) {
add(souce[i]);
}
houxu(root, arr);
return arr;
}
int count = 0;
public void houxu(TreeNode root,int[] arr) {
if(root != null) {
houxu(root.left,arr);
houxu(root.right,arr);
arr[count++] = root.data;
}
}
}