Data structure mutual assessment assignment 2

One.

SearchBST(T, key)

{

if (T is empty || T-> data == s)

return T

else if (T->data > s)

return SearchBST(T->lchild, s)

else

return SearchBST(T->rchild, s)

}

 

InsertBST(T, key)

{

 if (T is empty)

{

   Create a new junction point

   The value of the new node is key

The left and right subtrees of the new node are NULL

 }

 if (T == key) returns T

 if(T->data>key)InsertBST(T->lchild,key)

 if(T->data<key)InsertBST(T->rchild,key)

}

BiTree SearchBST(BiTree T,int s)
{
    if (T == NULL || T->data == s)
        return T;
    else if (T->data > s)
        return SearchBST(T->lchild, s);
    else
        return SearchBST(T->rchild, s);
}
BiTree InsertBST(BiTree T, int key)
{
    if (T == NULL)
    {
        T = new BiTNode;
        T->data = key;
        T->lchild = T->rchild = NULL;
    }
    else if (T->data > key)
        T->lchild = InsertBST(T->lchild, key);
    else if (T->data < key)
        T->rchild = InsertBST(T->rchild, key);
    else
        cout << "该结点已存在";
    return T;
}

two.

2.CreateBST(T,key)

{

if (T is empty)

{

Create a new node T

T->data=key

The left and right subtrees are empty

}

else

{

if (T->data > x)

{

T->lchild = CreateBST(T->lchild, x)

}

if (T->data < x)

{

T->rchild = CreateBST(T->rchild, x)

}

}

return T

}

 

 three.

int DeleteBST (& T, key)
{
 if (T is empty)
  return 0;
 else
 {
  if (T-> data> key)
   return DeleteBST (T-> lchild, key);
  else if (T-> data <key)
   return DeleteBST (T-> rchild, key);
  else
  {
   Delete (T);
   return 1;
  }
 }
}
Delete (& T)
{
 new structure pointer p, q
 if (T-> rchild is empty)
 {
  p = T
  T = T-> lchild
  release p
 }
 else if (T-> lchild is empty)
 {
  p = T
  T = T-> rchild
  release p
 }
 else
 {
  p = T
  q = T-> lchild
  while (q->rchild不为空)
  {
   p = q
   q = q->rchild
  }
  T->data = q->data
  if (p != T)
   p->rchild = q->lchild
  else
   p->lchild = q->lchild
  释放q
 }
}

four.

void Delete(BiTree& T)
{
    BiTree p, q;
    if (T->rchild == NULL)
    {
        p = T;
        T = T->lchild;
        free(p);
    }
    else if (T->lchild == NULL)
    {
        p = T;
        T = T->rchild;
        free(p);
    }
    else
    {
        p = T;
        q = T->lchild;
        while (q->rchild)
        {
            p = q;
            q = q->rchild;
        }
        T->data = q->data;
        if (p != T)
            p->rchild = q->lchild;
        else
            p->lchild = q->lchild;
        free(q);
    }
}
int DeleteBST(BiTree &T,int key)
{
    if (T == NULL)
        return 0;
    else
    {
        if (T->data > key)
            return DeleteBST(T->lchild, key);
        else if (T->data < key)
            return DeleteBST(T->rchild, key);
        else
        {
            Delete(T);
            return 1;
        }
    }
}

Finally, the entire code

#include<iostream>
using namespace std;
typedef int ElementType;
typedef struct bNode
{
    ElementType data;
    struct bNode* lchild;
    struct bNode* rchild;
}BiTNode,*BiTree;
BiTree CreateBST(BiTree T,int x)
{
    if (T == NULL)
    {
        T = new BiTNode;
        T->data = x;
        T->lchild = T->rchild = NULL;
    }
    else
    {
        if (T->data > x)
        {
            T->lchild = CreateBST(T->lchild,x);
        }
        if (T->data < x)
        {
            T->rchild = CreateBST(T->rchild, x);
        }
    }
    return T;
}
void inordertraverse(BiTree T)
{
    if (T)
    {
        inordertraverse(T->lchild);
        cout << T->data << " ";
        inordertraverse(T->rchild);
    }
}

BiTree SearchBST(BiTree T,int s)
{
    if (T == NULL || T->data == s)
        return T;
    else if (T->data > s)
        return SearchBST(T->lchild, s);
    else
        return SearchBST(T->rchild, s);
}
BiTree InsertBST(BiTree T, int key)
{
    if (T == NULL)
    {
        T = new BiTNode;
        T->data = key;
        T->lchild = T->rchild = NULL;
    }
    else if (T->data > key)
        T->lchild = InsertBST(T->lchild, key);
    else if (T->data < key)
        T->rchild = InsertBST(T->rchild, key);
    else
        cout << "该结点已存在";
    return T;
}
void Delete(BiTree& T)
{
    BiTree p, q;
    if (T->rchild == NULL)
    {
        p = T;
        T = T->lchild;
        free(p);
    }
    else if (T->lchild == NULL)
    {
        p = T;
        T = T->rchild;
        free(p);
    }
    else
    {
        p = T;
        q = T->lchild;
        while (q->rchild)
        {
            p = q;
            q = q->rchild;
        }
        T->data = q->data;
        if (p != T)
            p->rchild = q->lchild;
        else
            p->lchild = q->lchild;
        free(q);
    }
}
int DeleteBST(BiTree &T,int key)
{
    if (T == NULL)
        return 0;
    else
    {
        if (T->data > key)
            return DeleteBST(T->lchild, key);
        else if (T->data < key)
            return DeleteBST(T->rchild, key);
        else
        {
            Delete(T);
            return 1;
        }
    }
}
int main()
{
    BiTree root=NULL,T;
    int n, x,s;
    int j,k;
    cin >> n;
    for (int i = 0;i < n;i++)
    {
        cin >> x;
        root = CreateBST(root, x);
    }
    cout << "中序:";
    inordertraverse(root);
    cin >> s;
    T=SearchBST(root, s);
    if (T) 
        cout << " The node exists " << endl;
     else 
        cout << " The node does not exist " << endl; 
    cin >> j; 
    root = InsertBST (root, j); 
    cin >> k ;
     if (DeleteBST (root, k)) 
        cout << " delete successful " << endl;
     else 
        cout << " delete failed " << endl; 
}

 

Guess you like

Origin www.cnblogs.com/b12345/p/12731016.html