试利用栈的基本操作写出先序遍历二叉树的非递归形式的算法

编程入门 行业动态 更新时间:2024-10-27 04:34:47

试利用栈的基本操作写出先序遍历二叉树的非<a href=https://www.elefans.com/category/jswz/34/1771140.html style=递归形式的算法"/>

试利用栈的基本操作写出先序遍历二叉树的非递归形式的算法

试利用栈的基本操作写出先序遍历二叉树的非递归形式的算法

代码思路:
要用栈解决先序遍历,我们首先要知道栈的性质和二叉树先序遍历的规则

栈最基本的就是先进后出

而二叉树先序遍历就是“根左右”

利用这两个性质,我们可以先将根结点入队。
接下来,只要栈不空,我们就出栈一个元素,然后先入右孩子,再入左孩子
(因为栈是先进后出,那我们遍历完根结点之后下一个是左孩子,然后才是右孩子。所以先让右孩子进,再让左孩子进,这样出来的顺序就是我们要的先左后右了)

举例说明:

代码如下:

typedef struct BiTNode{//二叉树定义char data;BiTNode* lchild;BiTNode* rchild;
}BiTNode,*BiTree;//栈用到的基本操作
void InitStack(SqStack* s);
int Push(SqStack* s,BiTree e);
void Pop(SqStack* s,BiTree* e);
int StackEmpty(SqStack s);//二叉树的非递归前序遍历
void PreOrderTraverseNR	(BiTree T){SqStack s;//声明一个栈sInitStack(&s);//初始化一下Push(&s,T);//根节点入栈while(!StackEmpty(s)){BiTree p;//用于一会记录出栈结点Pop(&s,&p);printf("%c",p->data);//先入右孩子再入左孩子//后面出栈的顺序就是:先左后右if(p->rchild){//右孩子不是NULL,入栈Push(&s,p->rchild);}if(p->lchild){Push(&s,p->lchild);}}
}

更多推荐

试利用栈的基本操作写出先序遍历二叉树的非递归形式的算法

本文发布于:2023-11-16 12:17:26,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1621759.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:递归   遍历   算法   形式   操作

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!