判断输入的数组是不是某个BST的前序遍历序列

来源:互联网 发布:java高并发编程 视频 编辑:程序博客网 时间:2024/05/17 12:25

研究了根据输入的数组,判断数组是不是某个BST的后序遍历序列,现在写出自己的“判断输入的数组是不是某个BST的前序遍历序列”,实现代码如下:

#include<iostream>using namespace std;bool VerifyPreSquenceOfBST(int sequence[], int length){    if(sequence == NULL || length <= 0)        return false;if (length==1)return true;    int root = sequence[0];    // 在二叉搜索树中左子树的结点小于根结点    int i = 1;    for(; i < length; ++ i)    {        if(sequence[i] > root)            break;    }    // 在二叉搜索树中右子树的结点大于根结点    int j = i;    for(; j < length; ++ j)    {        if(sequence[j] < root)            return false;    }    // 判断左子树是不是二叉搜索树    bool left = true;    if(i > 1)        left = VerifyPreSquenceOfBST(sequence+1, i-1);//注意细节    // 判断右子树是不是二叉搜索树    bool right = true;    if(i < length)        right = VerifyPreSquenceOfBST(sequence + i, length - i);//注意细节    return (left && right);}int main(){//int data[] = {10};//只含根节点//int data[] = {10,9};//只含左子节点//int data[] = {10,9,8};//int data[] = {10,12};//只含右子节点//int data[] = {10,12,14};//int data[] = {10,11,12};//只含一个左右子节点//int data[] = {10,6,4,8,14,12,16};//含多个左右子节点int data[] = {10,6,11,12,9};//错误测试bool flag = VerifyPreSquenceOfBST(data, sizeof(data)/sizeof(*data));if (flag)cout<<"yes!"<<endl;elsecout<<"no!"<<endl;    return 0;}



0 0
原创粉丝点击