博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二叉树的遍历的非递归实现
阅读量:4620 次
发布时间:2019-06-09

本文共 898 字,大约阅读时间需要 2 分钟。

采用堆栈实现

1.先序遍历

void InOrderTraversal(BinTree BT){	BinTree T=BT;	Stack S=CreatStack(MaxSize);	while(T || !IsEmpty(S))	{		while(T)//T存在就压栈,遍历其左子树		{			Push(S,T);			T=T->Left;		}		if(!IsEmpty(S))//压入的全部弹出来		{			T=Pop(S);			printf("%d\n",T->Data);			T=T->Right;//最后将T变成了T的右子节点		}	}}

 2.中序遍历

void PreOrderTraversal(BinTree BT){	BinTree T=BT;	Stack S=CreatStack(MaxSize);	while(T || !IsEmpty)(S){		while(T){			printf("%d\n",T->Data);			Push(S,T);			T=T->Left;		}		if(!IsEmpty(S)){			T=Pop(S);			T=T->Right;		}	}}

 3.后序遍历(待补)

 

队列实现

4.层次遍历

void LevelOrderTraversal(BinTree BT)    {    	Queue Q;BinTree T;    	if(!BT) return;    	Q=CreatQueue(MaxSize);    	AddQ(Q,BT)    	while(!IsEmptyQ(Q)){    		T=DeleteQ(Q);    		printf("%d\n",T->Data);    		if(T->Left) AddQ(Q,T->Left);    		if(T->Right) AddQ(Q,T->Right);    	}    }

 思路大概是先访问根节点,如果有左右儿子节点,就把左右儿子节点入队,依次循环访问

转载于:https://www.cnblogs.com/lcpl96/p/5730073.html

你可能感兴趣的文章
COJ1127(芝麻开门)
查看>>
LeetCode 575. Distribute Candies
查看>>
基础练习 闰年判断
查看>>
Unity Unable to read header archive file
查看>>
[Leetcode] Path Sum II
查看>>
spring <context:component-scan>使用说明(转)
查看>>
理解JavaScript中的“this”
查看>>
今天研究了一下 windows特有的 完成端口 IOCP 重叠IO端口 ,记录下它与普通socket的区别...
查看>>
2017总结+展望2018
查看>>
山东省第七届ACM省赛
查看>>
Spring boot入门demo
查看>>
Jmeter(四十三)_性能测试分配堆内存
查看>>
JSP userBean------从指定范围查找id内容,查不到就创建一个放到scope指定的范围里面...
查看>>
delete 用法总结
查看>>
组件之Button
查看>>
SQL Server 2016 RC0 安装(超多图)
查看>>
mysql常用命令
查看>>
Hibernate学习11——配置Hibernate二级缓存
查看>>
C#学习笔记—数组的创建
查看>>
Linux 下wifi 驱动开发(四)—— USB接口WiFi驱动浅析
查看>>