二叉树的创建C++.docx

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
二叉树的创建C

递归法构造二叉树#includeiostreamusing namespace std;struct Tree ????????????????????????????????//用结构体创建节点{char element;Tree *lchilden;Tree?*rchilden;};Tree?*Create()??????????????????????????????//创建树{??? char ch;??? cin ch;???if( ch ==#?)????{???????? return NULL;????}??? else????{?Tree *root=(Tree*)malloc(sizeof(Tree));root-element = ch;???????? root-lchilden = Create();???????????????????????????????//左孩子递归???????? root-rchilden = Create();???????????????????????????????//右孩子递归???????? return root;????}}void visit(Tree*t)??????????????????????????????????????//访问方法{cout t-element;}void preOrder(Tree *t)???????????????????????????//遍历二叉树{if?(t!=NULL)?{visit(t);preOrder(t-lchilden);preOrder(t-rchilden);}}int main()????????????????????????????????????????????????//测试{Tree *p;p?= Create();preOrder(p);system(pause);return 0;}如何正确的理解递归法?递归一定要有返回,此例中有两个返回的条件 return NULL ; return root;?递归是一个不断进栈和出栈的过程。出栈时理论上数据是没了,但是因为是在堆里创建结构体所以结构体还在,通过一个头指针把整个链表串起来。这个程序是以先序的方式输入数据的;以一个节点为例应输入A##;应为A不为#,进入else语句。先执行左孩子递归,此时输入为#,return NULL;左孩子的递归执行完了,语句往下走,执行右孩子递归。此时输入为#,return NULL;右孩子的递归执行完了。程序再往下走,return root;返回指针root;此时root就为头指针;现在已两个结点为例应输入AB###;应为A不为#,进入else语句。先执行左孩子递归,此时输入为B,root指向B;B进入递归(A-lchilden-B)先执行左孩子递归,此时输入为#,return NULL;(B的左孩子的全部递归执行完了)语句往下走,执行右孩子递归。此时输入为#,return NULL;(B的右孩子右孩子的递归执行完了。)程序再往下走,return root;返回指针root;此时root指向A;(A的左孩子全部执行完了)程序进入了下一条语句执行A的右孩子此时输入为#,return NULL;(此时A的右孩子的递归执行完了,)程序再往下走,return root;返回root;此时root为头指针。此时应输入ABC##DE#G##F###?模拟程序执行如下应为A不为#,进入else语句。先执行左孩子递归,此时输入为B,root指向B;B进入递归(A-lchilden-B)?????应为B不为#,进入else语句。?????????先执行左孩子递归,此时输入为C,root指向C;C进入递归(A-lchilden-B-lchilden-C )??????????????先执行左孩子递归,此时输入为#,return NULL;(C的左孩子的全部递归执行完了)?????????语句往下走,执行右孩子递归。此时输入为#,return NULL;(C的右孩子右孩子的递归执行完了)?????????程序再往下走,return root;返回指针root;此时root指向B;(B的左孩子全部执行完了)???????程序进入了下一条语句执行B的右孩子???????语句往下走,执行右孩子递归。应为E不为#,进入else语句。????先执行左孩子递归,此时输入为#,return NULL;(E的左孩子的全部递归执行完了)?语句往下走,执行右孩子递归。.................................................

您可能关注的文档

文档评论(0)

hhuiws1482 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:5024214302000003

1亿VIP精品文档

相关文档