二叉树的遍历学习心得 二叉树的非递归遍历学习心得 对于学习数据结构的新手来说,二叉树应该是遇到的一个比较大的难题。对于二叉树的遍历,如果使用递归的方法,代码非常简单,但是有些程序语言不支持递归,而且递归的执行效率偏低,使许多程序设计人员望而却步下面我将与大家分享我在学习二叉树的非递归遍历的过程中遇到的困惑与解答,以供学习和交流。 鉴于有些数据结构资料中没有介绍树的结点的栈的结点的构造,首先向大家介绍结点的构造。 typedefstructbitnode{chardata; \树的结点的数据域(以字符型数据为 \树的结点的结构 例) structbitnode*lchild,*rchild; \树的子树指针 }bitnode,*bittree; typedefstructnode{bitnodestack; \栈的数据域类型为树的结点 \栈的结点结构 structnode*next;}linkstack;遍历的前提当然是二叉树存在,下面为大家介绍树的建立。bittreecreat_bittree{ bittreebt; \树的根结点 charx;scanf("%c",x); \树的建立的子函数类型为树的指针类型 }if(x=='X')bt=null;else{ }returnbt; \如果输入为’X’,则返回空结点 bt=(bittree)malloc(sizeof(bitnode));\若输入有效,则申请结点空间 bt->data=x; \ 装 填 结 点 \ 插 入 左 子 树 \ 插 入 右 子 树 bt->lchild=creat_bittree;bt->rchild=creat_bittree; 第 1 页 共 5 页 建立二叉树的过程使用了递归,如果理解不了,可以自己画图助于理解,建立决定了二叉树的形状,一定要弄清楚。如所要建立的二叉树的形状为 那么输入应该为 abdXXeg 。 接下来是栈的一些操作,因为任何一本数据结构的资料都会在栈和队列的章节说得很清楚,下面只是做了一些比较小的改动,请读者自行体会。intinit_stack(linkstack**s){ } intpush_stack(linkstack*s,bitnode*x) *s= (linkstack*)malloc(sizeof(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 ( "stackisnull\n");p=s->next;s->next=p->next;*e=p->stack;free(p);return1;linkstack*p; p=(linkstack*)malloc(sizeof(linkstack));p->stack=*x;p->next=s->next;s->next=p;return1;先介绍先序遍历的算法,先建立根结点,再建立左子树再到右...