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

来源:互联网 发布:淘宝购买送货入户 编辑:程序博客网 时间:2024/06/08 05:32

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

1.输入一个整数的数组,判断该数组是不是某棵二叉搜索树的后序遍历序列。假设输入的数组的任意两个数字互不相同。

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



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

#include<iostream>using namespace std;bool VerifySquenceOFBST(int a[],int length){if(a==NULL||length<=0)return false;int root=a[length-1];//左子树小于根节点int i=0;for(;i<length-1;++i){if(a[i]>root)break;}//右子树大于根节点int j=i;for(;j<length-1;++j){if(a[j]<root)return false;}//判断左子树int left=true;if(i>0)left=VerifySquenceOFBST(a,i);//判断右子树int right=true;if(j<length-1)right=VerifySquenceOFBST(a+i,length-1-i);return (left&&right);}int main(){int a[]={5,7,6,9,11,10,8};int b[]={7,4,6,5};int ret=VerifySquenceOFBST(a,7);cout<<ret<<endl;int ret1=VerifySquenceOFBST(b,4);cout<<ret1<<endl;system("pause");return 0;}   



阅读全文
0 0