给定一个树形结构,如图:

将它转换为孩子双亲表示法:

以下是JAVA实现://先序遍历

import java.util.ArrayList;

public class TreeTraverse{

    static int[] father = {
0,1,1,1,2,2,2,6,6,6,8,4,4,12,13,13,13
};
static int[] child = {
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17
}; public static void main(String[] arg){
ArrayList<Tree> trees = new ArrayList<>();
trees.add(new Tree(0));
int len = child.length;
for(int i = 0 ; i != len ; i ++ ){
trees.add(new Tree(child[i]));
}
for(int i = 0 ; i != len ; i ++ ){
Tree _father = trees.get(father[i]);
if(_father.getFChild()==null){
_father.setFChild(trees.get(child[i]));
System.out.println("父亲为 " + father[i] + " 大孩子为 " + child[i]);
continue;
}
Tree sibiling = _father.getFChild();
while(sibiling.getChildSibling()!=null){
sibiling = sibiling.getChildSibling();
}
sibiling.setChildSibling(trees.get(child[i]));
System.out.println("孩子为 " + sibiling.getNum() + " 右兄弟为 " + child[i]);
}
traverse(trees.get(0));
} static void traverse(Tree father){
if(father.getFChild()==null){
return;
}
System.out.print(father.getFChild().getNum() + " ");
traverse(father.getFChild());
Tree sibiling = father.getFChild();
while(sibiling.getChildSibling()!=null){
sibiling = sibiling.getChildSibling();
System.out.print(sibiling.getNum() + " ");
traverse(sibiling);
}
} static class Tree{
private int num;
private Tree fChild;
private Tree childSibling; public Tree(int num) {
super();
this.num = num;
} public int getNum() {
return num;
} public void setNum(int num) {
this.num = num;
} public Tree getFChild() {
return fChild;
} public void setFChild(Tree fChild) {
this.fChild = fChild;
} public Tree getChildSibling() {
return childSibling;
} public void setChildSibling(Tree sibling) {
this.childSibling = sibling;
} }
}

输出为:

父亲为 0 大孩子为 1
父亲为 1 大孩子为 2
孩子为 2 右兄弟为 3
孩子为 3 右兄弟为 4
父亲为 2 大孩子为 5
孩子为 5 右兄弟为 6
孩子为 6 右兄弟为 7
父亲为 6 大孩子为 8
孩子为 8 右兄弟为 9
孩子为 9 右兄弟为 10
父亲为 8 大孩子为 11
父亲为 4 大孩子为 12
孩子为 12 右兄弟为 13
父亲为 12 大孩子为 14
父亲为 13 大孩子为 15
孩子为 15 右兄弟为 16
孩子为 16 右兄弟为 17
1 2 5 6 8 11 9 10 7 3 4 12 14 13 15 16 17

  

树形遍历(java)---孩子双亲表示法的更多相关文章

  1. UVa11732 "strcmp()" Anyone?(Trie树+孩子兄弟表示法)

    我的做法是先建字典树,统计每个结点出现次数和相同字符串个数,每个结点对答案的贡献就是2*C(次数,2),然后再分别讨论相同字符串和不同字符串对答案的贡献. 另外这题主要就是Trie树的孩子兄弟表示法: ...

  2. java算法之冒泡排序法

    由此可见:N个数字要排序完成,总共进行N-1趟排序,每第 i 趟的排序次数为 (N-i) 次,所以 可以用双重循环语句,外层控制循环多少趟,内层控制每一趟的循环次数,即   for(inti=0;i& ...

  3. Java基础-Java中的并法库之重入读写锁(ReentrantReadWriteLock)

    Java基础-Java中的并法库之重入读写锁(ReentrantReadWriteLock) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在学习Java的之前,你可能已经听说过读 ...

  4. Java基础-Java中的并法库之线程池技术

    Java基础-Java中的并法库之线程池技术 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是线程池技术 二.

  5. 循环遍历Java字符串字符的规范方法——类似python for ch in string

    比如我将string作为CNN 文本处理输入: float [] input = new float[maxLength]; // 1 sentence by maxLenWords // int[] ...

  6. 选课 - 树型DP(孩子兄弟建树法)

    题目描述 学校实行学分制.每门的必修课都有固定的学分,同时还必须获得相应的选修课程学分.学校开设了 N(N<300)门的选修课程,每个学生可选课程的数量 M 是给定的.学生选修了这M门课并考核通 ...

  7. 邻接表的广度优先遍历(java版)

    到 0 的权是 91 到 2 的权是 31 到 3 的权是 61 到 4 的权是 7 2 到 0 的权是 22 到 3 的权是 5 3 到 0 的权是 33 到 4 的权是 1 4 到 2 的权是 2 ...

  8. 数据结构 -- 简单图的实现与遍历 (Java)

    ---恢复内容开始--- 作者版权所有,转载请注明出处,多谢. http://www.cnblogs.com/Henvealf/p/5534071.html 前些天因为某些原因,就试着回想一下图(gr ...

  9. Java使用选择排序法对数组排序

    编写程序,实现将输入的字符串转换为一维数组,并使用选择排序法对数组进行排序. 思路如下: 点击"生成随机数"按钮,创建Random随机数对象: 使用JTextArea的setTex ...

随机推荐

  1. 关于vs2013 mysql Ef框架中提示版本不兼容问题的解决办法

    <runtime>     <assemblyBinding>       <dependentAssembly>         <assemblyIden ...

  2. Codeforces 55D Beautiful Number

    Codeforces 55D Beautiful Number a positive integer number is beautiful if and only if it is divisibl ...

  3. 2016032101 - eclipse3.7+jdk1.6+maven3.0.5

    公司使用jdk1.6做开发环境,那么使用的eclipse需要下载3.7版本,因为eclipse4以上必须使用jdk1.7及其以上版本. 1.资源下载 jdk1.6需要去oracle官网去下载,可能需要 ...

  4. Sublime Text 3插件之SublimeTmpl:新建文件的模版插件

    SublimeTmpl能新建html.css.javascript.php.python.ruby六种类型的文件模板,所有的文件模板都在插件目录的templates文件夹里,可以自定义编辑文件模板. ...

  5. fatal error C1853

    http://myswirl.blog.163.com/blog/static/513186422011827105224739/ 预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C ...

  6. Codeforces Round #361 div2

    ProblemA(Codeforces Round 689A): 题意: 给一个手势, 问这个手势是否是唯一. 思路: 暴力, 模拟将这个手势上下左右移动一次看是否还在键盘上即可. 代码: #incl ...

  7. JavaScript中===与==的区别

    参考网址:http://zhidao.baidu.com/link?url=RbWnRUHKPBTakwm2-iRfEDicrh4ZSAAeVfq2WvBkvfeLPkU-ZSqZ4chV8LWkCk ...

  8. POJ 1236 Network of Schools[连通分量]

    题目链接:http://poj.org/problem?id=1236题目大意:给出N台电脑,电脑间单向连通传送文件问题1.网络中最少放几个文件保证所有电脑都能接受到文件问题2.最少向网络中加几条线保 ...

  9. 【洛谷P2927 [USACO08DEC]拼图游戏Jigsaw Puzzles】深搜

    其实,随便搜了一搜就可以AC了!!! - - 亏我纠结了这么久= = #include<cstdio> #include<cstdlib> #include<cstrin ...

  10. webbench的详细使用

    webbench是什么?是一款相当给力的网站压力测试工具.(优点自行搜索) 使用webbench需要两大步骤: 1.安装webbench 2.熟悉webbench命令 一.安装webbench 1.下 ...