//創(chuàng)建二叉樹捍歪,先序遍歷户辱,刪除樹中結(jié)點(diǎn)為x的子樹
include <stdio.h>
include <stdlib.h>
define maxsize 100
typedef struct BTNode
{
char data;
struct BTNode *lchild, rchild;
} BTNode, BTree;
void CreateBTNode(BTree T)
{
char ch;
scanf("%c", &ch);
if (ch == '#')
{
T = NULL;
}
else
{
T = (BTNode )malloc(sizeof(BTNode));
(T)->data = ch;
(T)->lchild = NULL;
(T)->rchild = NULL;
printf("\n建立左子樹\n");
CreateBTNode(&(T)->lchild);
printf("\n建立右子樹\n");
CreateBTNode(&(T)->rchild);
}
}
void PreOrder_Traverase(BTree T) //先序遍歷
{
if (T == NULL)
{
return;
}
else
{
printf(" %c ", T->data);
PreOrder_Traverase(T->lchild);
PreOrder_Traverase(T->rchild);
}
}
BTNode *postDel(BTree T)
{
if (T != NULL)
{
postDel(T->lchild);
postDel(T->rchild);
free(T);
}
return NULL;
}
BTNode *del(BTree T, char x)
{
BTNode *p = NULL;
if (T != NULL)
{
if (T->lchild != NULL && T->lchild->data == x)
{
p = T->lchild;
T->lchild = NULL;
postDel(p);
}
if (T->rchild != NULL && T->rchild->data == x)
{
p = T->rchild;
T->rchild = NULL;
postDel(p);
}
del(T->lchild, x);
del(T->rchild, x);
}
return T;
}
int main()
{
BTree T;
char x;
printf("創(chuàng)建二叉樹:"); //輸入ABC##DE#G##F###
CreateBTNode(&T);
printf("\n先序遍歷\n");
PreOrder_Traverase(T);
printf("\n要?jiǎng)h除的子樹的根節(jié)點(diǎn)為:");
scanf(" %c", &x);
del(T, x);
printf("\n刪除后:\n");
if (x == T->data)
{
printf("NULL");
}
else
{
PreOrder_Traverase(T);
}
printf("\n");
return 0;
}