欢迎来到代码驿站!

C代码

当前位置:首页 > 软件编程 > C代码

二叉树前序遍历的非递归算法

时间:2021-05-09 07:46:25|栏目:C代码|点击:
二叉树的前序遍历是先根节点,然后如果有左子树则再先序遍历左子树,然后如果有右子树则再先序遍历其又子树。
递归算法如下
复制代码 代码如下:

 void   preorder(Betree *t)
{   if(t==null) return;visit(t);//访问该节点preorder(t->lchild);preorder(t->rchild); }

当然递归算法是隐式使用了栈。我们仔细分析这个过程,先是取出了根节点进行了访问,然后我们把根节点退栈,退栈后必然有节点进栈,怎么办呢?根节点只能直接访问到rchild和lchild,如果是左子树的根节点进了栈,那么必然是后访问之,所以必然是rchild先进栈,lchild后进栈。可以画图加深理解。
那么现在写出先序遍历二叉树的算法。
复制代码 代码如下:

void preorder(Betree *t)
{ //算法中我们使用一维数组来模拟一个顺序栈
     if(t==null) return;//为空树的话完全没有必要进行下面的操作    
     Betree *stack[max];
     top=1;stack[top]=t;//根节点入栈
     while(top>0)
    {   nd=stack[top];//取出根节点  top=top-1;//退栈   visit(nd->data); //访问根节点 if(nd->rchild!=null) { top=top+1;stack[top]=nd->rchild;} //根节点有右子树,将其进栈,等到左子树访问完后再访问之
if(nd->lchild!=null) { top=top+1;stack[top]=nd->lchild;}
   }
}

上一篇:C++交换指针实例

栏    目:C代码

下一篇:求子数组最大和的解决方法详解

本文标题:二叉树前序遍历的非递归算法

本文地址:http://www.codeinn.net/misctech/118028.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有