判断整数序列是不是二元查找树的后序遍历结果
2010-09-18 23:34
274 查看
题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。如果是返回true,否则返回false。
例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果:
8
/ /
6 10
/ / / /
5 7 9 11
因此返回true。
如果输入7、4、6、5,没有哪棵树的后序遍历的结果是这个序列,因此返回false。
分析:这是一道trilogy的笔试题,主要考查对二元查找树的理解。
在后续遍历得到的序列中,最后一个元素为树的根结点。从头开始扫描这个序 列,比根结点小的元素都应该位于序列的左半部分;从第一个大于跟结点开始到跟结点前面的一个元素为止,所有元素都应该大于跟结点,因为这部分元素对应的是 树的右子树。
根据这样的划分,把序列划分为左右两部分,我们递归地确认序列的左、右两部分是不是都是二元查找树。
例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果:
8
/ /
6 10
/ / / /
5 7 9 11
因此返回true。
如果输入7、4、6、5,没有哪棵树的后序遍历的结果是这个序列,因此返回false。
分析:这是一道trilogy的笔试题,主要考查对二元查找树的理解。
在后续遍历得到的序列中,最后一个元素为树的根结点。从头开始扫描这个序 列,比根结点小的元素都应该位于序列的左半部分;从第一个大于跟结点开始到跟结点前面的一个元素为止,所有元素都应该大于跟结点,因为这部分元素对应的是 树的右子树。
根据这样的划分,把序列划分为左右两部分,我们递归地确认序列的左、右两部分是不是都是二元查找树。
bool verifySeqOfBST(int sequence[],int length){ if (NULL==sequence || length <=0) { return false; } //得到根节点,后续遍历 int root=sequence[length-1]; //左子树的数字 int i=0; for (i=0;i<length-1;i++) { if (sequence[i]>root) { break; } } //右子树的数字 int j=i; for (j=i;j<length-1;j++) { if (sequence[j]<root) { return false;//直接返回false即可 } } //左子树是否为bst bool left=true; if (i>0) { left=verifySeqOfBST(sequence,i); } //右子树是否是bst bool right=true; if(i<length-1){ right=verifySeqOfBST(sequence+i,length-i-1); } return left && right; } int main(int argc, char* argv[]) { int data[]={7,4,6,5}; bool result=verifySeqOfBST(data,sizeof(data)/sizeof(*data)); printf("%d/n",result); return 0; }
相关文章推荐
- 算法-判断整数序列是不是二元查找树的后序遍历结果
- 【编程题目】判断整数序列是不是二元查找树的后序遍历结果,如果是,构建该二元查找树
- 9.判断整数序列是不是二元查找树的后序遍历结果(树)
- 第九题(判断整数序列是不是二元查找树的后序遍历结果)
- 9.判断整数序列是不是二元查找树的后序遍历结果
- 判断整数序列是不是二元查找树的后序遍历结果
- 判断整数序列是不是二元查找树的后序遍历结果
- 面试100题:9.判断整数序列是不是二元查找树的后序遍历结果
- 判断整数序列是不是二元查找树的后序遍历结果(9)
- 第9题:判断整数序列是不是二元查找树的后序遍历结果
- 程序员面试题100题第06题——判断整数序列是不是二元查找树的后序遍历结果
- 判断整数序列是不是二元查找树的后序遍历结果
- 【算法】判断整数序列是不是二元查找树的后序遍历结果
- 微软100题第9题(判断整数序列是不是二元查找树的后序遍历结果)
- 判断整数序列是不是二元查找树的后序遍历结果 C++实现
- 判断整数序列是不是二元查找树的后序遍历结果
- 判断整数序列是否为二元查找树的后序遍历结果的解决方法
- 【数据结构】【输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果】
- 微软面试之9题 判断整数序列是不是二元查找树的后续遍历结果
- 判断整数序列是不是二元查找树的后续遍历结果