前序遍历的层号表示转孩子数组表示法
来源:互联网 发布:js清空数组中所有元素 编辑:程序博客网 时间:2024/04/19 15:05
思路:有一个层号表示法,如 1a,2b,2s,3v,3e,2e,3w
我们可以看出若当前层号比前一个的层号要大,则说明该节点是前一个节点的儿子,若相等,则说明是兄弟,若小于,则说明前面最近的那棵子树建立完毕。
当前点的层号比上个节点大时,直接将该节点的父亲记录为上一个节点,若相等,记录兄弟的父亲,若小于,则不断找该节点的兄弟。
#include<iostream>#include<cstdio>#include<cstring>#define maxn 11111#define m 3using namespace std;struct node{ char data; int child[m]; int parent;//记录该节点父亲节点的下标 node()//重载,初始化 { for(int i=0;i<m;i++) child[i]=-1; parent = -1; }};struct Tree{ node treelist[maxn]; int len;};struct Levenode//存放层号和值{ char data; int leve;};int length;//节点的个数void prepost(Tree &t,int n)//孩子数组的前序遍历{ if(n==t.len) return ; cout<<t.treelist[n].data; for(int i=0;i<m;i++) if(t.treelist[n].child[i]!=-1) prepost(t,t.treelist[n].child[i]);}void levetotree(Levenode leve[],Tree *t)//将层号表示法转化为孩子数组表示法{ int j; t->treelist[0].data=leve[0].data;//根节点直接放入 for(int i=1;i<length;i++) { t->treelist[i].data=leve[i].data; j=i-1; if(leve[i].leve>leve[j].leve)//当前节点的层号比前一个节点的层号大,则该节点为前一个节点的儿子 { t->treelist[i].parent=j; t->treelist[j].child[0]=i;//当前节点标记为前一个节点的儿子 } else//否则有两种情况,层号相等则为兄弟,当前层号小于前一个节点的层号表明前一个子树已经建完 { while(leve[i].leve<leve[j].leve) j=t->treelist[j].parent;//找到当前节点的兄弟,因为子树的深度不同,所以用循环 t->treelist[i].parent=t->treelist[j].parent;//兄弟间父亲相同 j=t->treelist[i].parent;//找到父亲 int k = 0; while(t->treelist[j].child[k]!=-1&&k<m) k++;//找父亲存放儿子下标的空位 t->treelist[j].child[k]=i;//记录儿子下标 //cout<<t->treelist[i].data<<endl; } }}int main(){ Levenode leve[maxn]; Tree t; cin>>length; for(int i=0;i<length;i++) cin>>leve[i].leve>>leve[i].data; levetotree(leve,&t); prepost(t,0); return 0;}
0 0
- 前序遍历的层号表示转孩子数组表示法
- 孩子指针表示法关于前序遍历的括号表示和凹入表示
- 括号表示转孩子数组表示法
- 前序遍历用一维数组表示的二叉树
- 层号表示法转孩子兄弟表示法(二叉树)
- 树的孩子兄弟表示法 及遍历实现
- 树的左孩子 右兄弟表示法的建立过程 (后序遍历)
- 树-孩子表示法
- 树 的 双亲表示法 及 双亲孩子表示法
- EOJ1811 根据层号表示建树并后序遍历
- 树的孩子兄弟表示法
- 树的孩子兄弟表示法
- VC++ 树的孩子兄弟表示法
- 树的双亲孩子表示法
- 图的前插表示法(基于数组实现)
- 括号表示法转孩子指针法
- 树的层号表示
- 数据结构图的数组表示法以及深度,广度遍历
- Kahn算法-拓扑排序
- zzulioj 1783: 简单的求和 (筛选求和) 求和预处理 好题
- HDU 1008-Elevator
- HDU 5569 长度为n的上升子序列个数d (大数模板+DP)
- QTime中currentTime()的使用方法
- 前序遍历的层号表示转孩子数组表示法
- 大白-Dijksta模板
- 线索二叉树
- 《Go语言入门》如何在Windows下安装Go语言编程环境
- QT5与之前版本间问题整理
- 解析错误:解析软件包时出现问题
- Android应用内语言切换实现
- HDU1877-又一版 A+B
- 杭电ACM1162(prim)