每天一道算法题(5)——判断整数序列是否是二叉查找树后序遍历结果
2015-05-21 11:26
239 查看
题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。如果是返回true,否则返回false。
2.程序
sizeof此时可用来判断数组的长度。
例如 输入5、7、6、9、11、10、8 true 输入7、4、6、5 false
1.思路
二叉查找树:左右子树均为二叉查找树,在此基础上,左子树的最大值(即最右节点)小于和右子树的最小值(即最左节点)大于根节点。1)使用递归。结束条件,仅有<=2个节点的序列一定是查找树。 2)以小于根节点的第一个节点作为左子树的根节点,划分左右子树。递归判断子树是否为查找树。 3)在此条件上,满足左子树最大值仍小于根节点值(步骤2中,保证右子树全部大于根节点,故右子树的最小值情况不用判断)
2.程序
bool verify(int *data,int length){//length为序列长度 if(length<=2) return true; else{ bool left=false,right=false; int j=length-2; int* root=data+length-1; for(;j>=0&&*(data+j)>*root;j--); left=verify(data,j+1); right=verify(data+j+1,length-j-2); if(left&&right&&(j<=0||*(data+j-1)<*root))//左子树仅有1个点或者没有节点的情况,不用判断左子树的最小值 return true; } return false; }
sizeof此时可用来判断数组的长度。
int data[]={7,4,6,5}; bool flag=verify(data,sizeof(data)/sizeof(int));
相关文章推荐
- 每天一道算法题(5)——判断整数序列是否是二叉查找树后序遍历结果
- 每天一道算法题5 判断整数序列是不是二元查找树的后序遍历结果
- 每天一道算法题(一):给定一个整数,判断这个数是否是回文
- 【算法】判断整数序列是不是二元查找树的后序遍历结果
- 算法—判断整数序列是不是二元查找树的后序遍历结果
- 每天一道算法题1 判断字符串是否是回文字符串或者是否含有回文字符子串
- 判断整数序列是否为 BST的后序遍历结果
- 每天学习一算法系列(27)(输入两个整数序列。其中一个序列表示栈的push 顺序,判断另一个序列有没有可能是对应的pop 顺序)
- 判断整数序列是否为二叉查找树的后序遍历结果
- 判断整数序列是否为二元查找树后序遍历的结果
- 算法讨论(五)--判断整数序列是不是二元查找树的后序遍历结果
- 判断整数序列是否为二元查找树的后序遍历结果的解决方法
- 算法-判断整数序列是不是二元查找树的后序遍历结果
- Interview----判断整数序列是否是二叉搜索树的后序遍历结果
- 每日一道算法题6——判断整数序列是不是二元查找树的后序遍历结果
- Interview----判断整数序列是否是二叉搜索树的后序遍历结果
- 算法习题9:判断整数序列是不是二元查找树的后序遍历结果
- 每天学习一算法系列(9) (输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果)
- 每天一算法(判断两个单向链表是否相交)
- 判断一个序列是否为另一个序列的子序列(两种算法)