面试题24:二叉搜索树的后序遍历序列

来源:互联网 发布:淘宝助理一键复制宝贝 编辑:程序博客网 时间:2024/05/29 14:10
1.输入一个整数的数组,判断该数组是不是某棵二叉搜索树的后序遍历序列。假设输入的数组的任意两个数字互不相同。

分析:例如输入数组{5,7,6,9,11,10,8},则返回true,因为这个序列可以找到这样的一棵二叉搜索树满足条件,而对于序列{7,4,6,5}则找不到这样的二叉搜索树。



二叉搜索树的性质是,左子树的节点的值比根节点的值大,根节点的值小于右子树的节点的值。从后序遍历的结果来看,序列中最后一个节点应该是根节点,序列中比根节点小的值是左子树的节点,大的值是右子树的节点。然后下一步 就是对左右子树用同样的方法。


源码:

/*判断二叉树的后续序列是否合法*/#include<iostream>using namespace std;// BST:Binary Search Tree,二叉搜索树bool VerifySquenceOfBST(int sequence[], int length){if(sequence == NULL || length <= 0)return false;int root = sequence[length - 1];// 在二叉搜索树中左子树的结点小于根结点int i = 0;for(; i < length - 1; ++ i){if(sequence[i] > root)break;}// 在二叉搜索树中右子树的结点大于根结点int j = i;for(; j < length - 1; ++ j){if(sequence[j] < root)return false;}// 判断左子树是不是二叉搜索树bool left = true;if(i > 0)left = VerifySquenceOfBST(sequence, i);// 判断右子树是不是二叉搜索树bool right = true;if(i < length - 1)right = VerifySquenceOfBST(sequence + i, length - i - 1);return (left && right);}int main(){int data[] = {4, 8, 6, 12, 16, 14, 10};bool result=VerifySquenceOfBST(data, sizeof(data)/sizeof(int));if (result==true)cout<<"sequence one is right!"<<endl;elsecout<<"sequence one is error!"<<endl;int data2[] = {7, 4, 6, 5};result=VerifySquenceOfBST(data2, sizeof(data2)/sizeof(int));if (result==true)cout<<"sequence second is right!"<<endl;elsecout<<"sequence second is error!"<<endl;system("PAUSE");return 0;}

结果:


0 0
原创粉丝点击