栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

二叉树的前、中、后序排列

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

二叉树的前、中、后序排列

前序排列

前序排列就是按照根、左子树、右子树的顺序输出。

搜索顺序如下:

void pro_dfs(int rt)//rt为当前节点
{
	if(rt == -1) return; //当该点不存在时返回上一个点
	cout << ' ' << tree[rt].u;//输出当前节点
	pro_dfs(tree[rt].lc);//扩展到左子树
	pro_dfs(tree[rt].rc);//扩展到右子树
}



中序排列

中序排列即为按照左子树、根、右子树的顺序输出。

搜索顺序如下:

void mid_dfs(int rt)
{
	if(rt == -1) return;
	mid_dfs(tree[rt].lc);
	cout << ' ' << tree[rt].u;
	mid_dfs(tree[rt].rc);
}



后序排列

按照左子树、右子树、根的顺序输出。

搜索顺序如下:

void post_dfs(int rt)
{
	if(rt == -1) return;
	post_dfs(tree[rt].lc);
	post_dfs(tree[rt].rc);
	cout << ' ' << tree[rt].u;
}



代码
#include 

using namespace std;

const int maxn = 100010;
int n;

struct hzw
{
	int lc,rc,u,fa;//左子树,右子树,当前节点,父亲节点
}tree[maxn];

void pro_dfs(int rt)//前序排列
{
	if(rt == -1) return;
	cout << ' ' << tree[rt].u;
	pro_dfs(tree[rt].lc);
	pro_dfs(tree[rt].rc);
}

void mid_dfs(int rt)//中序排列
{
	if(rt == -1) return;
	mid_dfs(tree[rt].lc);
	cout << ' ' << tree[rt].u;
	mid_dfs(tree[rt].rc);
}

void post_dfs(int rt)//后序排列
{
	if(rt == -1) return;
	post_dfs(tree[rt].lc);
	post_dfs(tree[rt].rc);
	cout << ' ' << tree[rt].u;
}

int main()
{
	cin >> n;
	for(int i=0; i> rt >> lc >> rc;
		tree[rt].u = rt;
		tree[rt].lc = lc;
		tree[rt].rc = rc;
		if(lc != -1) tree[lc].fa = rt;
		if(rc != -1) tree[rc].fa = rt;
	}
	int root;
	for(int i=0; i
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/587546.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号