码迷,mamicode.com
首页 > 其他好文 > 详细

数据结构 - 树 复习(不详细)

时间:2020-04-09 00:20:49      阅读:71      评论:0      收藏:0      [点我收藏+]

标签:har   长度   表示   pre   clu   层遍历   main   stream   就是   

数据结构 - 树

首先回忆一下树的术语

  1. 节点的度:一个节点含有的子树的个数称为该节点的树
  2. 树的度:一棵树中,最大的节点的度称为树的度
  3. 节点的层次:从根开始定义,根为第一层(有时候定义为第0层)
  4. 高度:对于任意节点n,n的高度为n到一片树叶的最长路径的长度,所有树叶的高度为0
    技术图片

树的遍历

  • 前序遍历:先访问根,然后访问左右子树
  • 中序遍历:先访问左子树,然后访问根,最后访问右子树
  • 后序遍历:先访问子树,然后访问根
  • 层序遍历:先访问离根节点最近的节点,按层遍历
#include<iostream>
using namespace std;

//树,定义左右子树
struct Node
{
	int lch = -1; //左节点 
	int rch = -1; //右节点 
	//现在都是-1,表示现在什么都不指向 
}; 

bool vis[29];
bool isnotroot[29];

Node tree[29];
char s[5];
void build(int p,int l,int r)
{
	vis[p]=true;
	if(l>=0)
	{
		tree[p].lch=l;
		vis[l]=true;
		isnotroot[l]=true; 
	}
	if(r>=0)
	{
		tree[p].rch=r;
		vis[r]=true;
		isnotroot[r]=true;
	}
} 

void pre_order(int r)
{
	if(r<0)
	{
		return ;
	}
	
	//递归 
	cout<<char(r+‘a‘);
	pre_order(tree[r].lch);
	pre_order(tree[r].rch);
	//四种遍历方法,就是改变这三句的顺序 
}
int main()
{
	int n;
	cin>>n;
	for(int i=0;i<n;i++)
	{
		cin>>s;
		build(s[0]-‘a‘,s[1]-‘a‘,s[2]-‘a‘);
	}
	
//输出,因为只有26个字母,直接输出树的根节点即可
	for(int i=0;i<26;i++)
	{
		if(vis[i]&&!isnotroot[i])  
		{
			pre_order(i);
			break;
		}
	}
	cout<<endl;
	return 0;
}

数据结构 - 树 复习(不详细)

标签:har   长度   表示   pre   clu   层遍历   main   stream   就是   

原文地址:https://www.cnblogs.com/serendipity-my/p/12663972.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!