二叉树的遍历教学文案.doc
《二叉树的遍历教学文案.doc》由会员分享,可在线阅读,更多相关《二叉树的遍历教学文案.doc(10页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、如有侵权,请联系网站删除,仅供学习与交流二叉树的遍历【精品文档】第 8 页目 录一、设计思想.01二、算法流程图.01三、源代码.04四、运行结果.08五、遇到的问题及解决.09六、心得体会.10一、 设计思想遍历二叉树首先有三种方法,即先序遍历,中序遍历和后序遍历。递归方法比较简单,首先获得结点指针如果指针不为空,且有左子,从左子递归到下一层,如果没有左子,从右子递归到下一层,如果指针为空,则结束一层递归调用。直到递归全部结束。 下面重点来讲述非递归方法:首先介绍先序遍历:先序遍历的顺序是根 左 右,也就是说先访问根结点然后访问其左子再然后访问其右子。具体算法实现如下:如果结点的指针不为空,
2、结点指针入栈,输出相应结点的数据,同时指针指向其左子,如果结点的指针为空,表示左子树访问结束,栈顶结点指针出栈,指针指向其右子,对其右子树进行访问, 如此循环,直至结点指针和栈均为空时,遍历结束。 再次介绍中序遍历:中序遍历的顺序是左 根 右,中序遍历和先序遍历思想差不多,只是打印顺序稍有变化。具体实现算法如下:如果结点指针不为空,结点入栈,指针指向其左子,如果指针为空,表示左子树访问完成,则栈顶结点指针出栈,并输出相应结点的数据,同时指针指向其右子,对其右子树进行访问。如此循环直至结点指针和栈均为空,遍历结束。最后介绍后序遍历:后序遍历的顺序是左 右 根,后序遍历是比较难的一种,首先需要建立
3、两个栈,一个用来存放结点的指针,另一个存放标志位,也是首先访问根结点,如果结点的指针不为空,根结点入栈,与之对应的标志位也随之入标志位栈,并赋值0,表示该结点的右子还没有访问,指针指向该结点的左子,如果结点指针为空,表示左子访问完成,父结点出栈,与之对应的标志位也随之出栈,如果相应的标志位值为0,表示右子树还没有访问,指针指向其右子,父结点再次入栈,与之对应的标志位也入栈,但要给标志位赋值为1,表示右子访问过。如果相应的标志位值为1,表示右子树已经访问完成,此时要输出相应结点的数据,同时将结点指针赋值为空,如此循环直至结点指针和栈均为空,遍历结束。二、 算法流程图下图是定义的二叉树的结构图AB
4、CDEGF图1 二叉树结构图下图是递归算法的流程图,首先的到当前根结点,判断结点指针是否空,如果非空,判断左子指针是否为空,非空则指向左子,左子作为当前根结点,空则判断右子指针是否为空,非空则指向右子,右子作为当前根结点,如果空,输出相应的数据,结束递归。图2 递归算法流程图下图是非递归算法先序遍历的算法流程图,首先对结点指针进行判断,如果指针不为空,结点指针入栈,输出数据,指针指向左子,访问左子树,如果结点指针为空,栈顶结点指针出栈,指针指向右子,访问右子树,直至遍历整个二叉树。图3 非递归先序遍历算法流程图下图是非递归中序遍历算法流程图,首先对结点指针进行判断,如果指针不为空,则指针入栈,
5、指针指向其左子,对左子树进行访问,如果结点指针为空,栈顶结点指针出栈,输出相应的数据,指针指向右子,对右子树进行访问,直至遍历整个二叉树。图4 非递归中序遍历算法流程图下图是非递归后序遍历二叉树算法流程图,首先对结点指针进行判断,如果指针不为空,结点指针和相应的标志位同时入栈,指针指向左子,对左子树进行遍历,如果指针为空,栈顶指针和相应的标志位同时出栈,如果标志位的值为0,则结点再次入栈,标志位置1,随之入栈,指针指向右子,访问右子树,如果标志位的值为1,输出相应结点的数据,并将结点指针置为NULL,直至遍历结束。图5 非递归后序遍历算法流程图三、 源代码#include#define MAX
6、 100 /表示栈的最大容量#define FULL 99/表示栈满#define EMPTY -1/表示栈空typedef struct Tnode /定义结点char data;/存储结点数据 struct Tnode *left;/定义结点左子指针struct Tnode *right;/定义右子指针Tnode,*Pnode;/声明Tnode类型的变量和指针typedef struct Stack/定义栈Pnode pnodeMAX;/存放数据int p;/栈顶指针Stack,*Pstack;/定义Stack类型的变量和指针void Push (Pstack pstack,Pnode p
7、node)/入栈pstack-p +;pstack-pnodepstack-p = pnode;/赋值Pnode Pop(Pstack pstack)/出栈return pstack-pnodepstack-p-;Pnode Top (Pstack pstack)/看栈顶元素return pstack-pnodepstack-p;int Isempty (Pstack pstack)/栈判空if(pstack-p=EMPTY)return 1;else return 0;int Isfull (Pstack pstack )/栈满if (pstack -p=FULL)return 1;else
8、 return 0;void Initstack (Pstack pstack)/初始化栈pstack-p=EMPTY;void Inittnode(Pnode root,Pnode left,Pnode right,char data)/初始化结点root-left=left;root-right = right;root-data = data;void PreorderR(Pnode proot)/递归先序遍历算法if(proot)printf(%2c,proot-data);PreorderR(proot-left);PreorderR(proot-right);void Inorde
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二叉 遍历 教学 文案
限制150内