为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

二叉树操作

2017-11-10 10页 doc 26KB 13阅读

用户头像

is_597436

暂无简介

举报
二叉树操作二叉树操作 #include"BiTree.h" #include void print(Item item) { printf("%d ",item); } main() { BiTNode * n1 = MakeNode(10,NULL,NULL); BiTNode * n2 = MakeNode(20,NULL,NULL); BiTNode * n3 = MakeNode(30,n1,n2); BiTNode * n4 = MakeNode(40,NULL,NULL); BiTNode * n5...
二叉树操作
二叉树操作 #include"BiTree.h" #include void print(Item item) { printf("%d ",item); } main() { BiTNode * n1 = MakeNode(10,NULL,NULL); BiTNode * n2 = MakeNode(20,NULL,NULL); BiTNode * n3 = MakeNode(30,n1,n2); BiTNode * n4 = MakeNode(40,NULL,NULL); BiTNode * n5 = MakeNode(50,NULL,NULL); BiTNode * n6 = MakeNode(60,n4,n5); BiTNode * n7 = MakeNode(70,NULL,NULL); BiTree tree = InitBiTree(n7); SetLChild(tree,n3); SetRChild(tree,n6); printf("树的深度为:%d",GetDepth(tree)); printf("\n先序遍历如下:"); PreOrderTraverse(tree,print); printf("\n中序遍历如下:"); InOrderTraverse(tree,print); printf("\n后序遍历如下:"); PostOrderTraverse(tree,print); DeleteChild(tree,1); printf("\n后序遍历如下:"); PostOrderTraverse(tree,print); DestroyBiTree(tree); if(IsEmpty(tree)) printf("\n二叉树为空,销毁完毕\n"); } typedef int Item; typedef struct node { struct node * lchild; struct node * rchild; Item data; }BiTNode,*BiTree; /*构造一棵新的二叉树*/ BiTree InitBiTree(BiTNode *root); /*生成节点*/ BiTNode *MakeNode(Item item,BiTNode *lchild,BiTNode *rchild); /*释放节点*/ void FreeNode(BiTNode *pnode); /*清空一棵二叉树*/ void ClearBiTree(BiTree tree); /*销毁一棵二叉树*/ void DestroyBiTree(BiTree tree); /*判定是否为空*/ IsEmpty(BiTree tree); /*返回树的深度*/ GetDepth(BiTree tree); /*返回根*/ BiTree GetRoot(BiTree tree); /*返回节点值*/ Item GetItem(BiTNode *pnode); /*设置节点值*/ void SetItem(BiTNode *pnode,Item item); /*设置左子树*/ BiTree SetLChild(BiTree parent,BiTree lchild); /*设置右子树*/ BiTree SetRChild(BiTree parent,BiTree rchild); /*返回左子树*/ #include"BiTree.h" #include #include /*构造一棵新的二叉树*/ BiTree InitBiTree(BiTNode *root) { BiTree tree = root; return tree; } /*生成节点*/ BiTNode *MakeNode(Item item,BiTNode *lchild,BiTNode *rchild) { BiTNode * pnode = (BiTNode *)malloc(sizeof(BiTNode)); if(pnode) { pnode->data = item; pnode->lchild = lchild; pnode->rchild = rchild; } return pnode; } /*释放节点*/ void FreeNode(BiTNode *pnode) { if(pnode!=NULL) free(pnode); } /*清空一棵二叉树*/ void ClearBiTree(BiTree tree) { BiTNode * pnode = tree; if(pnode->lchild!=NULL) ClearBiTree(pnode->lchild); if(pnode->rchild!=NULL) ClearBiTree(pnode->rchild); FreeNode(pnode); } /*销毁一棵二叉树*/ void DestroyBiTree(BiTree tree) { if(tree) ClearBiTree(tree); } /*判定是否为空*/ IsEmpty(BiTree tree) { if(tree==NULL) return 0; else return 1; } /*返回树的深度*/ int GetDepth(BiTree tree) { int cd,ld,rd; cd = ld = rd = 0; if(tree) { ld = GetDepth(tree->lchild); rd = GetDepth(tree->rchild); cd = (ld > rd ? ld : rd); return cd+1; } else return 0; } /*返回根*/ BiTree GetRoot(BiTree tree) { return tree; } /*返回节点值*/ Item GetItem(BiTNode *pnode) { return pnode->data; } /*设置节点值*/ void SetItem(BiTNode *pnode,Item item) { pnode->data = item; } /*设置左子树*/ BiTree SetLChild(BiTree parent,BiTree lchild) { parent->lchild = lchild; return lchild; } /*设置右子树*/ BiTree SetRChild(BiTree parent,BiTree rchild) { parent->rchild = rchild; return rchild; } /*返回左子树*/ BiTree GetLChild(BiTree tree) { if(tree) return tree->lchild; return NULL; } /*返回右子树*/ BiTree GetRChild(BiTree tree) { if(tree) return tree->rchild; return NULL; } /*插入新子树*/ BiTree InsertChild(BiTree parent,int lr,BiTree child) { if(parent) { if( lr == 0 && parent->lchild == NULL) { parent->lchild = child; return child; } if( lr == 1 && parent->rchild == NULL) { parent->rchild = child; return child; } } return NULL; } /*删除子树*/ void DeleteChild(BiTree parent,int lr) { if(parent) { if( lr == 0 && parent->lchild != NULL) { parent->lchild = NULL; FreeNode(parent->lchild); } if( lr == 1 && parent->rchild != NULL) { parent->rchild = NULL; FreeNode(parent->rchild); } } } /*先序遍历二叉树*/ PreOrderTraverse(BiTree tree,void(*visit)()) { BiTNode * pnode = tree; if(pnode) { visit(pnode->data); PreOrderTraverse(pnode->lchild,visit); PreOrderTraverse(pnode->rchild,visit); } } /*中序遍历二叉树*/ InOrderTraverse(BiTree tree,void(*visit)()) { BiTNode * pnode = tree; if(pnode) { InOrderTraverse(pnode->lchild,visit); visit(pnode->data); InOrderTraverse(pnode->rchild,visit); } } /*后序遍历二叉树*/ PostOrderTraverse(BiTree tree,void(*visit)()) { BiTNode * pnode = tree; if(pnode) { PostOrderTraverse(pnode->lchild,visit); PostOrderTraverse(pnode->rchild,visit); visit(pnode->data); } } BiTree GetLChild(BiTree tree); /*返回右子树*/ BiTree GetRChild(BiTree tree); /*插入新子树*/ BiTree InsertChild(BiTree parent,int lr,BiTree child); /*删除子树*/ void DeleteChild(BiTree parent,int lr); /*先序遍历二叉树*/ PreOrderTraverse(BiTree tree,void(*visit)()); /*中序遍历二叉树*/ InOrderTraverse(BiTree tree,void(*visit)()); /*后序遍历二叉树*/ PostOrderTraverse(BiTree tree,void(*visit)());
/
本文档为【二叉树操作】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索