/***************************************** 函数名称: void ClearBiTree(BiTree *T) 功能描述: 二叉树清除 输入参数: BiTree *T -- 二叉树头指针 输出参数: 无 返回值 : 无 修改日期: 2013.7.3 修改人 : 秦涛 *****************************************/ void ClearBiTree(BiTree *T) { if(NULL!=*T) { ClearBiTree(&(*T)->lchild); ClearBiTree(&(*T)->rchild); free(*T); *T = NULL; } }
Status DeleteChild(BiPTree p,int LR) /* 形参T无用 */ { /* 初始条件: 二叉树T存在,p指向T中某个结点,LR为0或1 */ /* 操作结果: 根据LR为0或1,删除T中p所指结点的左或右子树 */ if(p) /* p不空 */ { if(LR==0) /* 删除左子树 */ ClearBiTree(&p->lchild); else /* 删除右子树 */ ClearBiTree(&p->rchild); return OK; } return ERROR; /* p空 */ }
Status DeleteChild(BiTree p,int LR) // 形参T无用 { // 初始条件: 二叉树T存在,p指向T中某个结点,LR为0或1 // 操作结果: 根据LR为0或1,删除T中p所指结点的左或右子树 if(p) // p不空 { if(LR==0) // 删除左子树 ClearBiTree(p->lchild); else // 删除右子树 ClearBiTree(p->rchild); return OK; } return ERROR; // p空 }
void ClearBiTree(BinaryTree * binaryTree){ if(binaryTree->lChild){ ClearBiTree(binaryTree->lChild); } if(binaryTree->rChild){ ClearBiTree(binaryTree->rChild); } if(binaryTree){ free(binaryTree); binaryTree=NULL; } }
int main(void) { BiTree pTree = NULL; pTree = CreatBiTree(pTree); PreTraverse(pTree); ClearBiTree(&pTree); PreTraverse(pTree); return 0; }
void main() { Status i; int j; position p; TElemType e; SqBiTree T,s; InitBiTree(T); CreateBiTree(T); printf("建立二叉树后,树空否?%d(1:是 0:否) 树的深度=%d\n",BiTreeEmpty(T),BiTreeDepth(T)); i=Root(T,&e); if(i) printf("二叉树的根为:%d\n",e); else printf("树空,无根\n"); printf("层序遍历二叉树:\n"); LevelOrderTraverse(T,visit); printf("中序遍历二叉树:\n"); InOrderTraverse(T,visit); printf("后序遍历二叉树:\n"); PostOrderTraverse(T,visit); printf("请输入待修改结点的层号 本层序号: "); scanf("%d%d",&p.level,&p.order); e=Value(T,p); printf("待修改结点的原值为%d请输入新值: ",e); scanf("%d",&e); Assign(T,p,e); printf("先序遍历二叉树:\n"); PreOrderTraverse(T,visit); printf("结点%d的双亲为%d,左右孩子分别为",e,Parent(T,e)); printf("%d,%d,左右兄弟分别为",LeftChild(T,e),RightChild(T,e)); printf("%d,%d\n",LeftSibling(T,e),RightSibling(T,e)); InitBiTree(s); printf("建立右子树为空的树s:\n"); CreateBiTree(s); printf("树s插到树T中,请输入树T中树s的双亲结点 s为左(0)或右(1)子树: "); scanf("%d%d",&e,&j); InsertChild(T,e,j,s); Print(T); printf("删除子树,请输入待删除子树根结点的层号 本层序号 左(0)或右(1)子树: "); scanf("%d%d%d",&p.level,&p.order,&j); DeleteChild(T,p,j); Print(T); ClearBiTree(T); printf("清除二叉树后,树空否?%d(1:是 0:否) 树的深度=%d\n",BiTreeEmpty(T),BiTreeDepth(T)); i=Root(T,&e); if(i) printf("二叉树的根为:%d\n",e); else printf("树空,无根\n"); }
int main() { Status i; Position p; TElemType e; SqBiTree T; InitBiTree(T); CreateBiTree(T); printf("建立二叉树后,树空否?%d(1:是 0:否) 树的深度=%d\n",BiTreeEmpty(T),BiTreeDepth(T)); i=Root(T,&e); if(i) printf("二叉树的根为:%d\n",e); else printf("树空,无根\n"); printf("层序遍历二叉树:\n"); LevelOrderTraverse(T); printf("前序遍历二叉树:\n"); PreOrderTraverse(T); printf("中序遍历二叉树:\n"); InOrderTraverse(T); printf("后序遍历二叉树:\n"); PostOrderTraverse(T); printf("修改结点的层号3本层序号2。"); p.level=3; p.order=2; e=Value(T,p); printf("待修改结点的原值为%d请输入新值:50 ",e); e=50; Assign(T,p,e); printf("前序遍历二叉树:\n"); PreOrderTraverse(T); printf("结点%d的双亲为%d,左右孩子分别为",e,Parent(T,e)); printf("%d,%d,左右兄弟分别为",LeftChild(T,e),RightChild(T,e)); printf("%d,%d\n",LeftSibling(T,e),RightSibling(T,e)); ClearBiTree(T); printf("清除二叉树后,树空否?%d(1:是 0:否) 树的深度=%d\n",BiTreeEmpty(T),BiTreeDepth(T)); i=Root(T,&e); if(i) printf("二叉树的根为:%d\n",e); else printf("树空,无根\n"); return 0; }
void DestroyBiTree(BinaryTree * binaryTree){ if(binaryTree){ ClearBiTree(binaryTree); } binaryTree=NULL; }