欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    实验四 二叉树操作实现(7页).doc

    • 资源ID:35939706       资源大小:148.50KB        全文页数:7页
    • 资源格式: DOC        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    实验四 二叉树操作实现(7页).doc

    -实验四 二叉树操作实现实验日期: 2017 年 4 月 20 日 实验目的及要求1. 熟练掌握树的基本概念、二叉树的基本操作及在链式存储结构上的实现;2. 重点掌握二叉树的创建、遍历及求深度等算法;3. 掌握运用递归方式描述算法及编写递归C程序的方法,提高算法分析和程序设计能力。实验内容键盘输入一个字符串,利用二叉树前序遍历的结果建成一棵二叉树,并用三种遍历方法打印,比较是否与自己预先想象的相一致。再求树的深度、1度结点数、2度节点数,交换二叉树的左右子树并输出交换后的中序遍历结果验证交换的正确性。找到二叉树中序遍历最后一个结点并输出结点值。二叉树结点类型定义:typedef char datatype; typedef struct tnode datatype data; struct tnode *lchild,*rchild; BiTNode,*BiTree; 任务1题目要求创建一个程序文件sy4.cpp,自定义相应函数完成以下操作:(1)void visit(BiTree p) /*输出p指针指向的结点*/(2)void Preorder(BiTree T) /*前序遍历*/(3)void Inorder(BiTree T) /*中序遍历*/(4)void Postorder(BiTree T) /*后序遍历*/(5)BiTree CreateTree( ) /*以前序遍历的顺序建立二叉树*/(6)int deep(BiTree T) /*求二叉树深度*/(7)int leaf(BiTree T) /*求叶子结点数*/(8)int OneChild(BiTree T) /*求1度结点数*/(9)int TwoChild(BiTree T) /*求2度结点数*/(10)void Exchange(BiTree T) /*二叉树左右子树交换*/(11)BiTree InorderLastNode(BiTree T); /*找二叉树中序遍历最后一个结点*/2请回答下列问题(1)在n个结点二叉树的二叉链表存储中,其指针域的总数为 2n 个,其中 n-1 个用于链接孩子结点, n+1 个空闲着。(2)在二叉链表存储中,数据域值为data,左右子树的指针分别为left和right,则判断:指针p所指结点为0度结点的条件是 p->left=NULL&&p->right=NULL ;指针p所指结点为1度结点的条件是 (p->left=NULL&&p->right!=NULL)|(p->left!=NULL&&p->right=NULL) ;指针p所指结点为2度结点的条件是 p->left!=NULL&&p->right!=NULL 。(3)T为二叉树的根的地址,该树是空二叉树满足条件: T=NULL 。3sy14.cpp源程序清单(含必要的注释)#include<stdio.h>#include<stdlib.h>typedef char datatype;typedef struct tnode datatype data;struct tnode *lchild, *rchild; BiTNode, *BiTree;void visit(BiTree p); /*输出p指针指向的结点*/void Preorder(BiTree T); /*前序遍历*/void Inorder(BiTree T); /*中序遍历*/void Postorder(BiTree T); /*后序遍历*/BiTree CreateTree(); /*以前序遍历的顺序建立二叉树*/int deep(BiTree T); /*求二叉树深度*/int leaf(BiTree T); /*求叶子结点数*/int OneChild(BiTree T); /*求1度结点数*/int TwoChild(BiTree T); /*求2度结点数*/void Exchange(BiTree T); /*二叉树左右子树交换*/BiTree InorderLastNode(BiTree T); /*找二叉树中序遍历最后一个结点*/void visit(BiTree p) /*输出p指针指向的结点*/if (p->data != '#') printf("%c ", p->data);void Preorder(BiTree T) /*前序遍历*/if (T != NULL) visit(T); /访问根节点Preorder(T->lchild); /访问左子节点Preorder(T->rchild); /访问右子节点void Inorder(BiTree T) /*中序遍历*/if (T != NULL) Inorder(T->lchild); /访问左子节点visit(T); /访问根节点Inorder(T->rchild); /访问右子节点void Postorder(BiTree T) /*后序遍历*/if (T != NULL) Postorder(T->lchild); /访问左子节点Postorder(T->rchild); /访问右子节点visit(T); /访问根节点BiTree CreateTree() /*以前序遍历的顺序建立二叉树*/char ch;BiTree T;if (ch = getchar() = '#') /*#表示空树*/return NULL;else T = (BiTree)malloc(sizeof(BiTNode); /生成根节点T->data = ch;T->lchild = CreateTree(); /构造左子树T->rchild = CreateTree(); /构造右子树return T;int deep(BiTree T) /*求二叉树深度*/int lh, rh;if (T = NULL) return 0;else lh = deep(T->lchild);rh = deep(T->rchild);return (lh > rh ? lh : rh) + 1;int leaf(BiTree T) /*求叶子结点数*/int m, n;if (!T) /*空树没有叶子*/return 0;else if (!T->lchild && !T->rchild) /*叶子结点*/return 1;else /*左子树的结点数加上右子树的结点数*/m = leaf(T->lchild);n = leaf(T->rchild);return m + n;int OneChild(BiTree T) /*求1度结点数*/int n = 0;if (T = NULL) return 0;else if (T->lchild = NULL&&T->rchild != NULL) | (T->lchild != NULL&&T->rchild = NULL) n = 1;return OneChild(T->lchild) + OneChild(T->rchild) + n;int TwoChild(BiTree T) /*求2度结点数*/int n = 0;if (T = NULL) return 0;else if (T->lchild != NULL&&T->rchild != NULL)n = 1;return TwoChild(T->lchild) + TwoChild(T->rchild) + n;void Exchange(BiTree T) /*二叉树左右子树交换*/BiTree temp;if (T) temp = T->lchild;T->lchild = T->rchild;T->rchild = temp;Exchange(T->lchild);Exchange(T->rchild);BiTree InorderLastNode(BiTree T) /*找二叉树中序遍历最后一个结点*/if(T)while (T->rchild)T = T->rchild;return T;int main() BiTree T;printf("以前序遍历的二叉树:");T = CreateTree();printf("n先序遍历:");Preorder(T);printf("n");printf("n中序遍历:");Inorder(T);printf("n");printf("n后序遍历:");Postorder(T);printf("n");printf("n树的深度=%dn", deep(T);printf("叶子结点数=%dn", leaf(T);printf("1度结点数=%dn", OneChild(T);printf("2度结点数=%dn", TwoChild(T);printf("n二叉树中序遍历最后一个结点为:%c", InorderLastNode(T)->data);printf("n");printf("n交换后的二叉树先序遍历为:");Exchange(T); Preorder(T);printf("n交换后的二叉树中序遍历为:");Inorder(T);printf("n交换后的二叉树后序遍历为:");Postorder(T);printf("n");printf("n交换后的二叉树中序遍历最后一个结点为:%c", InorderLastNode(T)->data);printf("n");return 0;4程序执行后屏幕上的输入输出内容       A      /     B    /    C   D      /      E   F             G实验总结分析(本程序的重点与难点,调试中出现的问题及解决方法等)-第 7 页-

    注意事项

    本文(实验四 二叉树操作实现(7页).doc)为本站会员(1595****071)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开