判断一棵树是否为排序二叉树(二叉搜索树)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013069552/article/details/81293487

问题:判断一棵树是否为排序二叉树(二叉搜索树)

思路:二叉排序树的中序遍历为一递增的排序,若果不满足这一条件,则,不是二叉树

程序实现:

#include <iostream>
#include<limits>

using namespace std;

typedef struct Btree
{
    int num;
    struct Btree * lchild;
    struct Btree * rchild;
} *PBtree,Btree;

int prev=numeric_limits<int>::min();

//建立一棵排序二叉树
PBtree createtree(PBtree root,int val)
{
    PBtree newNode=new Btree();
    newNode->lchild=NULL;
    newNode->rchild=NULL;
    newNode->num=val;

    if(root==NULL)
    {
        root=newNode;
        return newNode;
    }

    while(root!=NULL)
    {
        PBtree pback=NULL;
        PBtree pcur=root;
        while(pcur!=NULL)
        {
            pback=pcur;
            if(pcur->num<val)
                pcur=pcur->rchild;
            else if(pcur->num>val)
                pcur=pcur->lchild;
            else
            {
                delete newNode;
                return pcur;
            }
        }

        if(pback->num>val)
            pback->lchild=newNode;
        else
            pback->rchild=newNode;
        return pback;
    }
}

//递归实现先序遍历
void preorder(PBtree root)
{
    if(root==NULL)
        return ;
    cout<<root->num<<" ";
    preorder(root->lchild);
    preorder(root->rchild);
}

//递归实现中序遍历
void inorder(PBtree root)
{
    if(root==NULL)
        return ;
    inorder(root->lchild);
    cout<<root->num<<" ";
    inorder(root->rchild);
}

//递归实现后序遍历
void postorder(PBtree root)
{
    if(root==NULL)
        return ;
    postorder(root->lchild);
    postorder(root->rchild);
    cout<<root->num<<" ";
}



bool judgeBST1(PBtree root)
{
    if(root==NULL)
        return 1;
    else
    {
        int b=judgeBST1(root->lchild);

        if(b==0||prev>=root->num)
            return 0;
        judgeBST1(root->rchild);
    }
}
int main()
{
    PBtree root=NULL;
    //cout<<prev<<endl;
    root=createtree(root,6);
    int a[]={1,2,-6,3,-4,7,9,8,10,5};
    for(int i=0;i<10;i++)
        createtree(root,a[i]);
    cout<<judgeBST1(root)<<endl;

    inorder(root);

    return 0;
}

输出结果:

1
-6 -4 1 2 3 5 6 7 8 9 10

展开阅读全文

没有更多推荐了,返回首页