您的位置:首页 > 其它

判断数组是否为搜索二叉树的后序遍历

2017-04-05 11:08 477 查看
题目:

给一个整数型数组,在其中没有重复值的情况下,判断该数组是不是某二叉搜索树的后序遍历的结果。

如果是则输出false,否则输出true

解法思路(递归):

because 二叉树的后序遍历:左孩子—>右孩子—>
父结点

step1:如果一个数组arr是搜索二叉树的后序遍历结果,那arr的最后一个元素就是树的根结点root

step2:去掉最后一个元素arr[End]=root后, arr可以分成两段,(前一段 = 左子树)小于root,(后一段 = 右子树)大于root

step3: 分别递归前后两段,如果这(两段 = 子树)都是符合上述规则的。则输出true

,否则输出false


例如:

input:arr = [2,4,6,5,3,7,10,9,8]

step1:根节点
root=8

step2:(前一段=左子树):[2,4,6,5,3,7]

(后一段=右子树):[10,9]

step3: 前、后两段都符合规则

output:true

java实现:

public class verifySquenceOfBSTpostOrder {
public boolean solve(int[] arr){
if(arr == null || arr.length == 0){
return true;
}
return judge(arr,0,arr.length-1);
}

boolean judge(int[] arr, int Start, int End){
if(Start >= End){return true;}
//找到,根节点位置
int i = End ;

//找到左右子树临界位置
while (i > 0 && arr[i-1] > arr[End]){
--i;
}

//判断左边部分是不是都小于根节点
for( int j = i-1; j > 0; --j){
if(arr[j] > arr[End])
return false;
}

//分别递归左右子树
return judge(arr, Start, i-1) && judge(arr, i, End-1);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  二叉树 遍历 递归