线性表
栈&队列
串
二叉树
持续更新中,尽请期待!!!
#include <bits/stdc++.h>
using namespace std;
#define TElemType char
#define Status int
typedef struct BiTNode
{
TElemType data;
struct BiTNode *lchild, *rchild;
} BiTNode, *BiTree;
Status InitBiTree(BiTree &T);
Status DestroyBiTree(BiTree &T);
Status CreateBiTree(BiTree &T);
void ClearBiTree(BiTree &T);
Status BiTreeEmpty(BiTree T);
int BiTreeDepth(BiTree T);
Status Root(BiTree T);
Status Value(BiTree T, TElemType e);
Status Assign(BiTree &T, TElemType e, TElemType value);
Status Parent(BiTree T, TElemType e);
Status LeftChild(BiTree T, TElemType e);
Status RightChild(BiTree T, TElemType e);
Status LeftSibling(BiTree T, TElemType e);
Status RightSibling(BiTree T, TElemType e);
Status InsertChild(BiTree T, BiTree p, int LR, BiTree c);
Status DeleteChild(BiTree T, BiTree p, int LR);
Status InitBiTree(BiTree &T){
T = NULL;
return 1;
}
Status DestroyBiTree(BiTree &T){
if ((T)->lchild)
DestroyBiTree(T->lchild);
if ((T)->rchild)
DestroyBiTree(T->rchild);
free(T);
T = NULL;
return 1;
}
Status CreateBiTree(BiTree &T){
TElemType ch;
scanf("%c", &ch);
if (ch == ' ')
T = NULL;
else
{
T = (BiTree)malloc(sizeof(BiTNode));
if (!T)
exit(_OVERFLOW);
T->data = ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
return 1;
}
void ClearBiTree(BiTree &T){
if (T){
if ((T)->lchild)
ClearBiTree(T->lchild);
if ((T)->rchild)
ClearBiTree(T->rchild);
free(T);
T = NULL;
}
}
Status BiTreeEmpty(BiTree T){
if (T)
return 0;
else
return 1;
}
int BiTreeDepth(BiTree T){
int i, j;
if (!T)
return 0;
if (T->lchild)
i = BiTreeDepth(T->lchild);
else
i = 0;
if (T->rchild)
j = BiTreeDepth(T->rchild);
else
j = 0;
return i > j ? i + 1 : j + 1;
}
Status Root(BiTree T){
cout << T->data << endl;
return 1;
}
Status Value(BiTree T,TElemType e){
if(T->data==e)
return 1;
else{
int i = 0, j = 0;
if(T->lchild)
i = Value(T->lchild, e);
if(T->rchild)
j = Value(T->rchild, e);
if(i||j)
return 1;
else
return 0;
}
return 0;
}
Status Assign(BiTree &T,TElemType e,TElemType value){
if(T->data==e){
T->data = value;
return 1;
}
else{
int i=0,j=0;
if(T->lchild){
i = Assign(T->lchild, e, value);
}
if(T->rchild){
j=Assign(T->rchild,e,value);
}
if(i||j) return 1;
else return 0;
}
return 0;
}
Status Parent(BiTree T,TElemType e){
if(T->lchild&&T->lchild->data==e){
printf("双亲节点为:%c\n",T->data);
return 1;
}
else if(T->rchild&&T->rchild->data==e){
printf("双亲节点为:%c\n",T->data);
return 1;
}
else{
if(T->lchild){
Parent(T->lchild,e);
}
if(T->rchild){
Parent(T->rchild,e);
}
}
return 0;
}
Status LeftChild(BiTree T,TElemType e){
if(T->data==e&&T->lchild){
printf("左孩子节点为:%c\n",T->lchild->data);
return 1;
}
else{
if(T->lchild){
LeftChild(T->lchild,e);
}
if(T->rchild){
LeftChild(T->rchild,e);
}
}
return 0;
}
Status RightChild(BiTree T,TElemType e){
if(T->data==e&&T->rchild){
printf("右孩子节点为:%c\n",T->rchild->data);
return 1;
}
else{
if(T->lchild){
RightChild(T->lchild,e);
}
if(T->rchild){
RightChild(T->rchild,e);
}
}
return 0;
}
Status LeftSibling(BiTree T,TElemType e){
if(T->lchild&&T->rchild->data==e){
printf("左兄弟节点为:%c\n",T->lchild->data);
return 1;
}
else{
if(T->lchild){
LeftSibling(T->lchild,e);
}
if(T->rchild){
LeftSibling(T->rchild,e);
}
}
return 0;
}
Status RightSibling(BiTree T,TElemType e){
if(T->rchild&&T->lchild->data==e){
printf("左兄弟节点为:%c\n",T->rchild->data);
return 1;
}
else{
if(T->lchild){
RightSibling(T->lchild,e);
}
if(T->rchild){
RightSibling(T->rchild,e);
}
}
return 0;
}
Status InsertChild(BiTree T,BiTree p,int LR,BiTree c){
if(LR==0){
c->rchild=p->lchild;
p->lchild=c;
}
else{
c->rchild=p->rchild;
p->rchild=c;
}
return 1;
}
Status DeleteChild(BiTree T,BiTree p,int LR){
if(LR==0){
DestroyBiTree(p->lchild);
}
else{
DestroyBiTree(p->rchild);
}
return 1;
}