数据结构 - 树 复习(不详细)
数据结构 - 树
首先回忆一下树的术语
- 节点的度:一个节点含有的子树的个数称为该节点的树
- 树的度:一棵树中,最大的节点的度称为树的度
- 节点的层次:从根开始定义,根为第一层(有时候定义为第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; }
相关推荐
koushr 2020-11-12
zhangxiafll 2020-11-13
kikaylee 2020-10-31
范范 2020-10-28
MILemon 2020-10-22
hugebawu 2020-10-12
LauraRan 2020-09-28
shenwenjie 2020-09-24
omyrobin 2020-09-23
guangcheng 2020-09-22
qiangde 2020-09-13
hanyujianke 2020-08-18
晨曦之星 2020-08-14
xiesheng 2020-08-06
KAIrving 2020-08-02
xiesheng 2020-08-02
范范 2020-07-30
chenfei0 2020-07-30