您的位置:首页 > 其它

二叉树

2016-04-10 09:30 281 查看
typedef struct BiTNode
{
TElemType data;
struct BiTNode *lchild, *rchild;
}BiTNode, *BiTree;
Status InitBiTree(BiTree *T)
{
*T = NULL;
return OK;
}

void DestroyBiTree(BiTree *T)
{
if (*T)
{
if ((*T)->lchild)
DestroyBiTree(&(*T)->lchild);
if((*T)->rchild)
DestroyBiTree(&(*T)->rchild);
free(*T);
*T = NULL;
}
}
/* 按前序输入二叉树中结点的值(一个字符) */
/* #表示空树,构造二叉链表表示二叉树T。 */
void 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);

}
}

Status BiTreeEmpty(BiTree T)
{
if (T)
return FALSE;
else
return TRUE;
}

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;
}

void PreOrderTraverse(BiTree T)
{
if (T == NULL)
return;
printf("%d", T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}

void InOrderTraverse(BiTree T)
{
if (T == NULL)
return;
InOrderTraverse(T->rchild);
printf("%d", T->data);
InOrderTraverse(T->rchild);
}

void PostOrderTraverse(BiTree T)
{
if (T == NULL)
return;
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
printf("&d", T->data);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: