二叉树的遍历学习心得(二).doc
《二叉树的遍历学习心得(二).doc》由会员分享,可在线阅读,更多相关《二叉树的遍历学习心得(二).doc(7页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、二叉树的遍历学习心得 二叉树的非递归遍历学习心得 对于学习数据结构的新手来说,二叉树应该是遇到的一个比较大的难题。对于二叉树的遍历,如果使用递归的方法,代码非常简单,但是有些程序语言不支持递归,而且递归的执行效率偏低,使许多程序设计人员望而却步下面我将与大家分享我在学习二叉树的非递归遍历的过程中遇到的困惑与解答,以供学习和交流。 鉴于有些数据结构资料中没有介绍树的结点的栈的结点的构造,首先向大家介绍结点的构造。 typedefstructbitnodechardata; 树的结点的数据域(以字符型数据为 树的结点的结构 例) structbitnode*lchild,*rchild; 树的子树
2、指针 bitnode,*bittree; typedefstructnodebitnodestack; 栈的数据域类型为树的结点 栈的结点结构 structnode*next;linkstack;遍历的前提当然是二叉树存在,下面为大家介绍树的建立。bittreecreat_bittree bittreebt; 树的根结点charx;scanf(”%c”,&x); 树的建立的子函数类型为树的指针类型 if(x=#)bt=null;else returnbt; 如果输入为#,则返回空结点 bt=(bittree)malloc(sizeof(bitnode);若输入有效,则申请结点空间bt-data
3、=x; 装填结点插入左子树插入右子树bt-lchild=creat_bittree;bt-rchild=creat_bittree; 建立二叉树的过程使用了递归,如果理解不了,可以自己画图助于理解,建立决定了二叉树的形状,一定要弄清楚。如所要建立的二叉树的形状为 那么输入应该为abd#eg#。 接下来是栈的一些操作,因为任何一本数据结构的资料都会在栈和队列的章节说得很清楚,下面只是做了一些比较小的改动,请读者自行体会。intinit_stack(linkstack*s) intpush_stack(linkstack*s,bitnode*x) *s=(linkstack*)malloc(siz
4、eof(linkstack);(*s)-next=null;return1; intpop_stack(linkstack*s,bitnode*e) return0; intempty_stack(linkstack*s) if(s-next=null)return1;return0;linkstack*p; if(empty_stack(s)printf(”stackisnulln”);p=s-next;s-next=p-next;*e=p-stack;free(p);return1;linkstack*p; p=(linkstack*)malloc(sizeof(linkstack);p-
5、stack=*x;p-next=s-next;s-next=p;return1;先介绍先序遍历的算法,先建立根结点,再建立左子树再到右子树,遍历是相对于每一棵子树来说的,这一点要格外注意。最重要的是要在脑海里建立模型,在后面的后序遍历中尤显模型的重要性。voidpre_order(bittreet) 以下是主函数。intmain bittreet; printf(”nt*欢迎来到二叉linkstack*s;bittreep;p=t; init_stack(&s);push_stack(s,p);while(。empty_stack(s) pop_stack(s,p); printf(”t%c”
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二叉 遍历 学习心得
限制150内