网站服务器是主机吗一个空间放2个网站
web/
2025/9/26 0:53:07/
文章来源:
网站服务器是主机吗,一个空间放2个网站,湖南做旅游网站,在线购物网站的设计与实现二叉树的遍历#xff08;堆栈#xff09;
如何理解用堆栈方式代替递归去遍历二叉树#xff0c;关键点在于了解每个结点输出时的顺序#xff0c;以及理解前序中序后序是如何遍历的#xff0c;这点很重要#xff0c;可以自己画一个树图#xff0c;熟练写出遍历的结果 以…二叉树的遍历堆栈
如何理解用堆栈方式代替递归去遍历二叉树关键点在于了解每个结点输出时的顺序以及理解前序中序后序是如何遍历的这点很重要可以自己画一个树图熟练写出遍历的结果 以上图为例在进行先序遍历的时候最先输出的是A而在中序遍历的时候A是在第四次时候才输出DEBA 以中序遍历为例子我们要先遍历所有的左子树把每个左子树上的结点存入堆栈中然后再pop出堆栈里的结点输出该结点然后在判断该结点是否还有右儿子 下面的代码就是遍历所有的左子树上的结点存入堆栈中然后依次pop出结点判断当前结点是否存在右儿子 以上图为例D结点虽然没有左儿子和右儿子了但是在以链表来看实际上D存在着为NULL的左儿子和右儿子,所以所有的叶子结点都存在值为NULL的左儿子和右儿子E结点,F结点同理。 在第二层循坏While§循坏完后当前结点是D的左儿子NULL对于A来说 B是它的左儿子A是根节点同理 D此时并不是叶子结点而是 两个NULL的根节点通过pop取出D这一个根节点 然后判断D有没有右儿子很明显是有一个NULL的右儿子但是这只是对于链表的存储方式来说在真正树状图上它是不存在右儿子的你会发现最外层循坏语句 第二次循坏的时候pop直接取出 了B然后pp-rightp指向B的右儿子E所以可以把 语句理解为判断当前结点是否有右儿子结点没有则输出当前结点的根节点如果有的话继续对右边的结点进行操作
void firstoder(Tree p)//传送过来的二叉树
{ PNode pile createPNode();//创建一个堆栈pilewhile(p||!IsEmpty(pile)){while(p)//遍历左子树上的结点{push(pile,p);pp-left;}if(!IsEmpty(pile)){ppop(pile);printf(%d ,p-date);//输出结点的值pp-right;}}
}
先序遍历看图可知A B D都是相对于自己的左子树和右子树的根节点比如 A就是 BDE的根节点B就是DE的根节点D就是NULL NULL的根节点在先序遍历的时候根节点是最先输出的 其次是左节点和右结点所以在循坏的时候就要在循坏… 遍历左子树把每个左节点存入的堆栈的时候就要输出当前的结点也就是只用移动一下输出语句的位置就能从中序变为先序
void firstoder(Tree p)//传送过来的二叉树
{ PNode pile createPNode();//创建一个堆栈pilewhile(p||!IsEmpty(pile)){while(p)//遍历左子树上的结点{push(pile,p);printf(%d ,p-date);pp-left;}if(!IsEmpty(pile)){ppop(pile);pp-right;}}
} 接下来就是后序遍历后续遍历顺序是左 中 右关键点在于 我们现在处于左结点我们需要通过上一个头节点去访问跟我们现在的左节点同一层的右结点去输出右节点但此时头节点已经pop出来了所以头节点无法再访问到了所以我们需要把头节点的值保存下来压栈进堆栈里。
void firstoder(Tree p)//传送过来的二叉树
{ PNode pile createPNode();//创建一个堆栈pilewhile(p||!IsEmpty(pile)){while(p)//遍历左子树上的结点{push(pile,p);printf(%d ,p-date);pp-left;}if(!IsEmpty(pile)){Tree temp(Tree)malloc(sizeof(struct TreeNode));//创建临时指针存储头结点ppop(pile);temppop;pp-right;temp-rightNULL;//遍历的指针指向当前结点的右儿子把当前结点的右儿子设置NULL防止死循环if(p)push(pile,temp);//如果当前结点存在右儿子结点那么存储当前结点继续遍历右子树elseprintf(%d ,temp-date);//当前结点没有右儿子那么直接输出当前结点}}
} 我是一个小萌新第一次写博客写的很渣请见谅—
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/81903.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!