数据结构互评作业2
一.
SearchBST(T, key)
{
if (T为空 || 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为空)
{
建立新结点
新结点的值为key
新结点左右子树为NULL
}
if(T==key)返回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; }
二.
2.CreateBST(T,key)
{
if (T为空)
{
创建新结点T
T->data=key
T左右子树为空
}
else
{
if (T->data > x)
{
T->lchild = CreateBST(T->lchild, x)
}
if (T->data < x)
{
T->rchild = CreateBST(T->rchild, x)
}
}
return T
}
三.
int DeleteBST(&T, key)
{
if (T 为空)
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)
{
新建结构体指针p, q
if (T->rchild为空)
{
p = T
T = T->lchild
释放p
}
else if (T->lchild为空)
{
p = T
T = T->rchild
释放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
}
}
四.
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; } } }
最后是全部代码
#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 << "该结点存在"<<endl; else cout << "该结点不存在"<<endl; cin >> j; root = InsertBST(root, j); cin >> k; if (DeleteBST(root, k)) cout << "删除成功"<<endl; else cout << "删除失败" << endl; }