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

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

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

栈最基本的就是先进后出

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

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

举例说明:
在这里插入图片描述

代码如下:

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;//声明一个栈s
	InitStack(&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);
		}
	}
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

劲夫学编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值