数据结构 树6.25 地鼠安家1 源码存放

 

 

#include<iostream>
#include<stdlib.h>
#include<stack>
using namespace std;

typedef struct btnode *btlink;
typedef int TreeItem;

struct btnode{
    TreeItem element;
    TreeItem lnum;
    TreeItem rnum;
    TreeItem flag;
    btlink left;
    btlink right;
}Btnode,s[10002];

int n;
int count;
int a[10002];
btlink NewNode()
{
    btlink p;
    if((p=(btlink)malloc(sizeof(Btnode)))== 0);
    else return p; 
}

typedef struct binarytree *BinaryTree;
typedef struct binarytree{
    btlink root;
}BTree;

 //将root置为空指针,创建一颗空二叉树 
BinaryTree BinaryInit()
{
    BinaryTree T=(BinaryTree)malloc(sizeof(struct binarytree));
    T->root = 0;
    return T;
}

//检测root指针是否为空 
int BinaryEmpty(BinaryTree T){return T->root == 0;}

//返回T的根节点标号 
TreeItem Root(BinaryTree T)
{
    if(BinaryEmpty(T)) ;
    return T->root->element;
}

void MakeTree(BinaryTree bt)
{
    scanf("%d",&n);
    int l,m,r;
    for(int i=0;i<n;i++)
    {
        cin>>s[i].lnum>>s[i].element>>s[i].rnum;
        s[i].left = s[i].right =0;
        s[i].flag = 0;
    }
    for(int i=0;i<n;i++)
    {
        if(s[i].lnum==-1&&s[i].rnum==-1)continue;
        else
        {
            if(s[i].lnum != -1 && s[i].rnum ==-1)
            {
                for(int j = 0;j < n; j++)
                {
                    if(s[j].element == s[i].lnum){
                        s[i].left = &s[j];
                        s[j].flag = 1;
                        break;
                    }
                } 
            }
            else 
            if(s[i].rnum != -1 && s[i].lnum == -1)
            {
                for(int j = 0;j < n ;j++)
                {
                    if(s[j].element == s[i].rnum){
                        s[i].right = &s[j];
                        s[j].flag = 1;
                        break;
                    }
                }
            }
            else
            {
                for(int j=0;j < n;j++)
                {
                    if(s[j].element == s[i].lnum){
                        s[i].left = &s[j];
                        s[j].flag = 1;
                    }
                    if(s[j].element == s[i].rnum){
                        s[i].right = &s[j];
                        s[j].flag = 1; 
                    }
                }
            }
        }
    } 
    for(int i=0 ; i < n; i++)
    {
        if(s[i].flag == 0){
            bt->root = &s[i];
            break;
        }
    }
 } 
 
 int Height(btlink t)
 {
     int hl,hr;
     if(!t)return -1;
     hl=Height(t->left);
     hr=Height(t->right);
     if(hl>hr) return ++hl;
     else return ++hr;
 }
 
 void visit(btlink t){
     printf("%d\n",t->element);
 }
 
 void InOrder(btlink t)
 {
     if(t){
         InOrder(t->left);
           a[count]=t->element;
        count++;
         InOrder(t->right);
     }
 }

void JudgeTree(BinaryTree bt)
{
    int legal = 1;
    InOrder(bt->root);
    for(int i=0;i+1<n;i++){
        if(a[i+1]<a[i])
        {
            legal = 0;
            cout<<"-1"<<endl;
            break;
        }
    }
    if(legal)cout<<Height(bt->root)+1;
 } 

int main(){
    BinaryTree bt = BinaryInit();
    MakeTree(bt);
    JudgeTree(bt);
    return 0;
} 

 

posted on 2020-10-23 21:18  xwwer  阅读(87)  评论(0)    收藏  举报