博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二叉树三种遍历调试运行版
阅读量:4506 次
发布时间:2019-06-08

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

头文件:

#include 
struct BinaryTreeNode { int m_nValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pRight; };

先序输入建立:

void Create_BT(BinaryTreeNode *&bt)//先序输入二叉树{	int d;	scanf("%d",&d);	if(d==-1)bt=NULL;	else 	{		bt=(BinaryTreeNode*)malloc(sizeof(BinaryTreeNode));		bt->m_nValue=d;		Create_BT(bt->m_pLeft);		Create_BT(bt->m_pRight);	}	}

三种遍历方法:

void PreOrder(BinaryTreeNode *bt){	if(bt!=NULL)	{		printf("%d\n",bt->m_nValue);		PreOrder(bt->m_pLeft);		PreOrder(bt->m_pRight);	}}void InOrder(BinaryTreeNode *bt){	if(bt!=NULL)	{		InOrder(bt->m_pLeft);		printf("%d\n",bt->m_nValue);		InOrder(bt->m_pRight);	}}void PostOrder(BinaryTreeNode *bt){	if(bt!=NULL)	{		PostOrder(bt->m_pLeft);		PostOrder(bt->m_pRight);		printf("%d\n",bt->m_nValue);	}}void PreOrderStack(BinaryTreeNode *bt){	BinaryTreeNode *s[20];//栈	BinaryTreeNode *p=bt;	int top=-1;	while(p||top>-1)	{		while(p)		{			printf("%d\n",p->m_nValue);			s[++top]=p;			p=p->m_pLeft;		}		if(top>-1)		{			p=s[top];			top--;			p=p->m_pRight;		}	}}void InOrderStack(BinaryTreeNode *bt){	BinaryTreeNode *s[20];//栈	BinaryTreeNode *p=bt;	int top=-1;	while(p||top>-1)	{		while(p)		{			s[++top]=p;			p=p->m_pLeft;		}		if(top>-1)		{			p=s[top];			printf("%d\n",p->m_nValue);						top--;			p=p->m_pRight;		}	}}//后序二叉树非递归struct stacknode{	BinaryTreeNode *node;	int tag;//tag=0表示左子女已访问,tag=1表示右子女已访问};void PostOrderStack(BinaryTreeNode *bt){	stacknode s[20];//栈	stacknode temp;//暂存结点信息	BinaryTreeNode *p=bt;	int top=-1;	while(p||top>-1)	{		while(p)		{			temp.node=p;			temp.tag=0;			s[++top]=temp;			p=p->m_pLeft;		}		while(top>-1&&s[top].tag==1)//右子树已访问		{			printf("%d\n",s[top--].node->m_nValue);		}		if(top>-1)		{			s[top].tag=1;			p=s[top].node;			p=p->m_pRight;		}	}}

main函数:

int main(){	while(true)	{       BinaryTreeNode *bt;	   Create_BT(bt);	   PreOrderStack(bt);	   InOrderStack(bt);	   PostOrderStack(bt);	   //PreOrder(bt);	   //InOrder(bt);	   //PostOrder(bt);	}	return 0;}

  

转载于:https://www.cnblogs.com/tgkx1054/archive/2012/12/16/2820601.html

你可能感兴趣的文章
Docker 安装及问题处理
查看>>
正则表达式之 数据验证 与 文本替换
查看>>
linux 安装mysql数据库——yum安装法
查看>>
Visual Studio 2008 不能更改安装目录的原因
查看>>
关于求最大公约数
查看>>
为Linux配置常用源:epel和IUS
查看>>
天府地
查看>>
C#高级编程
查看>>
JS实现从照片中裁切自已的肖像
查看>>
使用 https://git.io 缩短 a GitHub.com URL.
查看>>
Python:yield关键字
查看>>
EasyRTSPClient:基于live555封装的支持重连的RTSP客户端RTSPClient
查看>>
MySQL巡检
查看>>
学习笔记之传说中的圣杯布局
查看>>
共享内存的设计
查看>>
2017-2018-1 20155203 20155204 实验二 固件程序设计
查看>>
数据可视化视频制作
查看>>
mysql 数据备份。pymysql模块
查看>>
FactoryMethod模式——设计模式学习
查看>>
Android中 AsyncTask
查看>>