数据结构 - 树 复习(不详细)
Posted serendipity-my
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构 - 树 复习(不详细)相关的知识,希望对你有一定的参考价值。
数据结构 - 树
首先回忆一下树的术语
- 节点的度:一个节点含有的子树的个数称为该节点的树
- 树的度:一棵树中,最大的节点的度称为树的度
- 节点的层次:从根开始定义,根为第一层(有时候定义为第0层)
- 高度:对于任意节点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;
}
以上是关于数据结构 - 树 复习(不详细)的主要内容,如果未能解决你的问题,请参考以下文章