二叉树的遍历学习心得(三).doc
《二叉树的遍历学习心得(三).doc》由会员分享,可在线阅读,更多相关《二叉树的遍历学习心得(三).doc(12页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、二叉树的遍历学习心得 目录 一设计思想.21递归遍历二叉树算法思想:.22非递归遍历二叉树算法思想:.2 二算法流程图.4三源代码.4四运行结果.16五遇到的问题及解决.161遇到的问题:.162解决方法:.16六心得体会.17 1 一设计思想 1递归遍历二叉树算法思想: (1)先序遍历:首先判断根结点是否为空,为空则停止遍历,不为空则将左子作为新的根结点重新进行上述判断,左子遍历结束后,再将右子作为根结点判断,直至结束。到达每一个结点时,打印该结点数据,即得先序遍历结果。若二叉树非空,则依次进行如下操作:(1)访问跟结点;(2)前序遍历左子树;(3)前序遍历右子树。 (2)中序遍历:首先判断
2、根结点是否为空,为空则结束,不为空则将左子作为根结点再进行判断,打印左子,然后打印二叉树的根结点,最后再将右子作为参数进行判断,打印右子,直至结束。若二叉树非空,则依次进行如下操作:(1)中序遍历左子树;(2)访问根结点;(3)中序遍历右子树。 (3)后序遍历:指针到达一个结点时,判断该结点是否为空,为空则停止遍历,不为空则将左子作为新的结点参数进行判断,打印左子。左子判断完成后,将右子作为结点参数传入判断,打印右子。左右子判断完成后打印根结点。若二叉树非空,则依次进行如下操作:(1)后序遍历左子树;(2)后序遍历右子树;(3)访问根结点。 2非递归遍历二叉树算法思想: (4)先序遍历。建立一
3、个栈,当指针到达根结点时,打印根结点,并进栈,判断是否有左子结点若有将左子结点作为根结点继续循环上述步骤。直到没有左子结点,然后弹栈判断前一元素是否有右结点一直到有右结点为止,有右结点后将其右结点作为根结点重复上述步骤直到栈为空并且左 2右指向子结点的指针都为空结束循环即完成了先序遍历 (5)中序遍历。建立一个栈,当指针到达根结点时,结点进栈,判断是否有左子结点若有将左子结点作为根结点继续循环上述步骤。直到没有左子结点,然后弹栈,每次弹栈都读取结点,然后判断前一元素是否有右结点一直到有右结点为止,有右结点后将其右结点作为根结点重复上述步骤直到栈为空并且左右指向子结点的指针都为空结束循环即完成了
4、中序遍历 (6)后序遍历。建立一个栈,并建立一个数组,数组伴随进栈出栈更改对应的值,数组里的数值代表进栈次数,1代表进栈1次,2代表进栈两次。当指针到达根结点时,进栈,判断是否有左子结点若有将左子结点作为根结点继续循环上述步骤。直到没有左子结点,然后弹栈判断前一元素是否有右结点若没有或已经进栈两次则读取结点的值并继续弹栈,一直到有右结点且只进过一次栈为止,然后将其第二次进栈,并将其右结点作为根结点重复上述步骤直到栈为空并且左右指向子结点的指针都为空结束循环即完成了后序遍历。 3二算法流程图 开始t传入根结点t=null。结点是否为空no结束yesvisit(t)打印根结点的值t-child访问
5、左子结点t-child访问右子结点 表1递归先序流程图 4 开始t结束t=null。t-childvisit(t) 表2递归中序遍历流程图 t-child5 开始t结束t=null。t-childt-child 表3递归后序遍历流程图 visit(t) 6 开始t,st传入树根指针,和栈指针a=t;b=t;aa。=null有左子结点yesvisit(a);intostack(st,a);a=a-lchild;nooutstack(st,&b);yesb=b-rchild;yesst-top。=1栈不空nobvisit(b);intostack(st,b);a=b-lchild;b。=null有
6、右子结点yesnost-top。=1&b=null栈不空且没有右子结点yesoutstack(st,&b);b=b-rchild;st-top。=1&(a。=null|b。=null)栈不空且有子节点no结束no 表4非递归先序遍历流程图 7开始t,sta=t;b=t;aa。=nullnooutstack(st,&b);visit(b);yesb=b-rchild;yesintostack(st,a);a=a-lchild;st-top。=1yesbb。=nullyesnointostack(st,b);a=b-lchild;nointostack(st,b);a=b-lchild;yesno
7、b。=nullst-top。=1&b=nullyesoutstack(st,&b);visit(b);b=b-rchild;no结束表5非递归后序遍历流程图 st-top。=1&(a。=null|b。=null)no 8开始t,sta=t;b=t;intimax;intj=0;aa。=nullnooutstack(st,&b);-j;a=b;b=b-rchild;yesintostack(st,a);ij+=1;a=a-lchild;yesst-top。=1yesbb。=nullnonoyesintostack(st,a);ij+=2;intostack(st,b);ij+=1;a=b-lch
8、ild;visit(a);intostack(st,a);ij+=2;intostack(st,b);ij+=1;a=b-lchild;yesvisit(a);a=null;b=null;noij。=2&b。=nullst-top。=1&b=nullyesoutstack(st,&b);-j;a=b;b=b-rchild;no结束st-top。=1&(a。=null|b。=null)no 表6非递归后序遍历流程图 9三源代码 #include#include#definesizesizeof(bitreea)#definemax500typedefstructbitreeachardata;s
9、tructbitreea*lchild,*rchild;bitreea,*b;/树结点typedefstructstackinttop; bsmax;stack;/创建栈 voidintostack(stack*st,bin) if(st-top=max-1)printf(”wrong”); st-s(st-top)+=in;/进栈函数 voidoutstack(stack*st,b*out) if(st-top=0)printf(”wrong”); *out=st-s-(st-top);/出栈函数voidvisit(bt)if(t-data。=#)printf(”%c”,t-data);/访
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二叉 遍历 学习心得
限制150内