判断数组是否为搜索二叉树的后序遍历
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实现:
给一个整数型数组,在其中没有重复值的情况下,判断该数组是不是某二叉搜索树的后序遍历的结果。
如果是则输出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); } }
相关文章推荐
- 二叉树问题---判断数组是否为某搜索二叉树的后序遍历的结果
- 剑指offer 判断数组的后序遍历是否为搜索二叉树
- 剑指off-判断一个数组是不是搜索二叉树的后序遍历的序列
- 判断给定数组是否是二叉树的前序或者后序遍历结果
- 判断数组是否是搜索二叉树的后序遍历
- 判断一个数组是不是二叉树后序遍历的结果
- 检查一个后序遍历是否是搜索二叉树
- 判断一个数组是否为后序遍历结果
- 判断一个数列是否是二叉树后序遍历的结果
- 二叉树的链式存储结构 前序 后序 中序 层序遍历操作实现 判断是否完全二叉树
- 输入一个数组,判断该数组是否是某二叉树的前序遍历结果
- 《剑指offer》:[24]判断一个序列是否为二叉树的后序遍历序列
- 判断数组是否是二叉搜索树的后序遍历序列 JAVA实现
- 后序遍历求解判断一颗二叉树是否为平衡二叉树
- 数据结构:题目(3)测试一个数组序列是否是二叉树的前序遍历或者后序遍历结果
- 判断给定的数组是否为二叉搜索树的后序遍历序列
- 【面试题】剑指offer24--判断一个序列是否为二叉树的后序遍历
- 判断二叉树的后序遍历序列是否合法
- 1367判断一个数组是否为二叉排序树的后序遍历结果