设为首页 加入收藏

TOP

二叉树数据结构的实现(二)
2017-03-01 08:15:32 】 浏览:407
Tags:数据结构 实现
eturn TRUE;


}


?


Status ReplaceLeft(BiTree &T,BiTree <){


if(NULL == T) return FALSE;


BiTree t;


t = T->lchild;


T->lchild = LT;


LT = t;


return TRUE;


}


?


Status ReplaceRight(BiTree &T,BiTree &RT){


if(NULL == T) return FALSE;


BiTree t;


t = T->rchild;


T->rchild = RT;


RT = t;


return TRUE;


}


Status CutLeft(BiTree &T,BiTree <){


if(NULL == T) {


LT = NULL;


return FALSE;


}


LT = T->lchild;


T->lchild = NULL;


return TRUE;


}


Status CutRight(BiTree &T,BiTree &RT){


if(NULL == T) {


RT = NULL;


return FALSE;


}


RT = T->lchild;


T->lchild = NULL;


return TRUE;


}


//先序遍历


Status PreTraverse(BiTree T,Status(*visit)(TElemType e)){


if(NULL == T) return OK;


if(ERROR == visit(T->data)) return ERROR;


if(ERROR == PreTraverse(T->lchild,visit))


return ERROR;


return PreTraverse(T->rchild,visit);


}


//中序遍历


Status MidTraverse(BiTree T,Status(*visit)(TElemType e)){


if(NULL == T) return OK;


if(ERROR == MidTraverse(T->lchild,visit))


return ERROR;


if(ERROR == visit(T->data))


return ERROR;


return MidTraverse(T->rchild,visit);


}


//后序遍历


void AfterTraverse(BiTree T){


if (T == NULL)


? ? return ;


? else


? ? {


? ? ? AfterTraverse (T->lchild);


? ? ? AfterTraverse (T->rchild);


? ? ? printf ("%d", T->data);


? ? }


}


Status visit(TElemType e) {


printf("%d",e);


}


//求深度


int BiTreeDepth(BiTree T){


int dL = 0,dR = 0;


if(NULL == T) return 0;


else{


dL = BiTreeDepth(T->lchild);


dR = BiTreeDepth(T->rchild);


return 1+(dL > dR ? dL : dR);


}


}


//建立二叉树


BiTree CreatBT ()


{


? BiTree t;


? int x;


? scanf ("%d", &x);


? if (x == 0)


? ? {


? ? ? t = NULL;


? ? }


? else


? ? {


? ? ? t = (BiTree) malloc (sizeof (BiTNode));


? ? ? t->data = x;


? ? ? printf ("\n请输入%d结点的左子结点:", t->data);


? ? ? t->lchild = CreatBT ();


? ? ? printf ("\n请输入%d结点的右子结点:", t->data);


? ? ? t->rchild = CreatBT ();


? ? }


? return t;


}


int main(){


BiTree T;


int i,k;


? ? InitBiTree(T);


? ? printf("正在为您建立二叉树,请以输入'0'表示值为空\n");


? ? printf ("请输入根结点:\n");


? ? //建立一颗二叉树


T = CreatBT ();


//对用户输入的树判空


i = BiTreeEmpty(T);


if(1 == i){


printf ("该树为空树\n");


}else{


? ? printf(" ----------先序遍历二叉树 ----------\n");


PreTraverse(T,visit);


printf("\n ----------中序遍历二叉树 ----------\n");


MidTraverse(T,visit);


printf("\n ----------后序遍历二叉树 ----------\n");


AfterTraverse(T);


printf("\n ----------二叉树的深度----------\n");


k = BiTreeDepth(T);


printf("%d",k);


BiTree T1,T2;


T1 = T;


printf("\n ----------为您剪掉左子树----------\n");


CutLeft(T1,T2);


printf("\n ----------剪掉左子树的先序遍历二叉树 ----------\n");


PreTraverse(T1,visit);


printf("\n ----------为您将左子树接回----------\n");


ReplaceLeft(T1,T2);


printf("\n ----------接回左子树的先序遍历二叉树 ----------\n");


PreTraverse(T1,visit);


printf("\n ----------为您拆散这课二叉树 ----------\n");


BreakBitree(T,T1,T2);


printf("\n ----------拆散后根节点的先序遍历二叉树 ----------\n");


PreTraverse(T,visit);


printf("\n ----------拆散后左子树的先序遍历二叉树 ----------\n");


PreTraverse(T1,visit);


printf("\n ----------拆散后右子树的先序遍历二叉树 ----------\n");


PreTraverse(T2,visit);


printf("\n ----------为您重新组装这课二叉树 ----------\n");


BiTree t = MakeBiTree(T->data,T1,T2);


printf("\n ----------组装后的先序遍历二叉树 ----------\n");


PreTraverse(t,visit);


DestoryBiTree(T);


}


while(1){//设置一个死循环,为了不让程序结束而关闭窗口


?



}


return 0;


}


测试数据:



预期子树为:



测试结果为:



首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C/C++程序运行时进程的内存分布情.. 下一篇Spring事务管理简述

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目