`

用二叉树生成森林

    博客分类:
  • java
 
阅读更多
package com.xianfengshangtai.interview;

/**
 * 已知给定输出为:
 *  1
 *	-2
 *	--3
 *	--4
 *	--5
 *	-6
 *	-7
 *	--8
 *	--9
 *	---10
 *	---11
 *  ---12
 * 在空格去填入合适的语句
 */
public class Problem15_17 {
	
	private static String m_strContents [] = {"1","2","3",null,"4",null,"5",null,null,
		"6",null,"7","8",null,"9","10",null,"11",null,"12",null,null};
	
	public static void main(String[] args) {
		BTree bt = new BTree("root");
		bt.generateTree(m_strContents);
		bt.getSon().browse(0);
	}
}



BTree.java代码如下:
 package com.xianfengshangtai.interview;

/**
 * 
 * 本程序用二叉树来表示森林
 * @author yangjianzhou
 * 根节点除外,每个节点除了保存自己的信息外,还要保存孩子节点与兄弟节点的信息
 * 解决方法:画图,使用栈来模拟程序运行过程
 * _____________(横线处)是要填写代码的部分
 */
public class BTree {

	private static int nNodesNum = 0;//表示当前节点的信息在输入数组中的索引
	
	private String m_strNode;//保存节点本身的信息
	
	private BTree m_btSon;//孩子节点
	
	private BTree m_btBrother;//兄弟节点
	
	public BTree(String strNode){
		m_strNode = strNode;
		m_btSon = null;
		m_btBrother = null;
	}
	
	public BTree getSon(){
		return m_btSon;
	}
	
	/**
	 * n表示当前节点在第几层
	 * 当前节点的子节点在第n+1层
	 * @param n
	 */
	public void browse(int n){
		for(int i=1;i<=n;i++){
			System.out.print("-");
		}
		System.out.println(m_strNode);
		
		if(m_btSon!=null){
			m_btSon.browse(n+1);
		//__m_btSon.browse(n+1);______
		//完成
		}
		if(m_btBrother!=null){
			m_btBrother.browse(n);
		}
	}
	/**
	 * 生成森林
	 * @param strNodes
	 */
	public void generateTree(String[] strNodes){
		nNodesNum = 0;
		addSon(strNodes);
	}
	/**
	 * 添加孩子节点
	 * @param strNodes
	 */
	private void addSon(String[] strNodes){
		if(nNodesNum>=strNodes.length){
			return ;
		}
		if(strNodes[nNodesNum]==null){
			nNodesNum++;
			addBrother(strNodes);
		}else{
			m_btSon = new BTree(strNodes[nNodesNum++]);
			m_btSon.addSon(strNodes);
			addBrother(strNodes);
			//_______addBrother(strNodes);____________
		}
	}
	
	/**
	 * 添加兄弟节点
	 * @param strNodes
	 */
	private void addBrother(String[] strNodes){
		if(nNodesNum>=strNodes.length){
			return ;
		}
		if(strNodes[nNodesNum]==null){
			nNodesNum++;
			return ;
		}else{
			m_btBrother = new BTree(strNodes[nNodesNum++]);
			m_btBrother.addSon(strNodes);
			//_________不填写任何语句___________________
		}
	}
}



运行结果:
 1
-2
--3
--4
--5
-6
-7
--8
--9
---10
---11
---12

分享到:
评论

相关推荐

    建立二叉树,并输出二叉树的先序,中序和后序遍历序列,以及二叉树的叶子数

    二叉树可执行代码,用了就知道 。 二叉树的遍历、线索及应用( 用递归或非递归的方法都可以) [问题描述] 建立二叉树,并输出二叉树的先序,中序和后序遍历序列,以及二叉树的叶子数。 [基本要求] 要求根据读取的...

    我自己写的ARM菜单生成与字库生成程序

    用山寨手机屏当ARM的屏幕,但是菜单每次都需要自己做。 本程序为本人花费了三天...里面用了大量的森林以及树还有二叉树的概念,做完之后我对二叉树已经了解的非常深了。另外里面还有一些关于文本解析的内容,可能有用。

    C++代码(《数据结构》)。

    顺序队列,循环队列、KMP算法、二叉树前、中、后、层次遍历(包含递归和非递归)、二叉树前、中线索遍历算法、图的邻接表深、广遍历、有向图十字链表深、广遍历、孩子、兄弟法无向图生成森林、邻接多重表普里娒算法...

    严蔚敏版《数据结构》代码实现

    顺序队列,循环队列、KMP算法、二叉树前、中、后、层次遍历(包含递归和非递归)、二叉树前、中线索遍历算法、图的邻接表深、广遍历、有向图十字链表深、广遍历、孩子、兄弟法无向图生成森林、邻接多重表普里娒算法...

    数据结构总结(自学、期末复习或考研备用).pdf

    、广义表、第六章树和二叉树、二叉树、二叉树的遍历、线索二叉树、树和森林的表示方法、树、森林与二叉树互换、哈夫曼树与哈夫曼编码、哈夫曼树、哈夫曼编码:、第七章图、图的存储结构:、图的遍历、深度优先遍历(DFS...

    南理工初试试题

    3.(3分)已知三棵树的森林如下,试把它转化为二叉树 A G N / \ / | \ / \ B C H I K O P / | \ / \ / | \ D E F L M R S T 4.(4分)按大顶堆将序列{56,8,15,80,10,22,28,50,60,40,90}调整为堆,...

    数据结构PPT文件

    生成树和生成森林;克鲁斯卡尔.pptx 17最小生成树普里姆算法.pptx 18单源最短路径;多源最短路径.pptx 19迪杰斯特拉与佛洛依德实践.pptx 20AOV网与拓扑排序.pptx 22堆排序与优先队列.pptx 23快速排序.pptx 24归并...

    数据结构与算法知识点.doc

    树、森林与二叉树之间的转换 7. 图的性质 1. 图的性质、图的存储、图的遍历(DFS,BFS) 2. 最小生成树概念,Prim算法,Kruscal算法 3. 最短路径算法:Dijkstra 算法,Floyd算法 4. 拓扑排序,关键路径 8

    数据结构讲义(严蔚敏版)(含算法源码).rar

    9. 树和森林 35 10. 赫夫曼树及其应用 36 二、 习题 37 第7章 图 39 一、 基础知识和算法 39 1. 图的有关概念 39 2. 图的存储结构 39 3. 图的遍历 42 4. 最小生成树 44 5. 拓扑排序 46 6. 关键路径 46 7. 最短路径 ...

    数据结构和算法动画演示

    树、森林和二叉树的转换 开放定址法建立散列表 拉链法创建散列表 朴素串匹配算法过程示意 图的深度优先遍历 邻接表表示的图的广度优先遍历 邻接表表示的图的深度优先遍历 拓扑排序 最短路径 克鲁斯卡尔算法构造最小...

    数据结构和算法Flash动画演示

    一些算法的 flash动画演示:B树的删除,B树的生长过程,三元组表的转置,中序线索化二叉树,串的顺序存储,二分查找,二叉排序树的删除,二叉排序树的生成,二叉树的建立,克鲁斯卡尔算法构造最小生成树,冒泡排序,...

    数据结构 c语言版

    数据结构在很多地方用的到,在计算机行业,很有用的 。 第1章 绪论 1.1 什么是数据结构 1.2 基本概念和术语 1.3 抽象数据类型的表现与实现 1.4 算法和算法分析 第2章 线性表 2.1 线性表的类型定义 2.2 线性表...

    数据结构(C语言版)

    6.4.2 森林与二叉树的转换 6.4.3 树和森林的遍历 6.5 树与等价问题 6.6 赫夫曼树及其应用 6.6.1 最优二叉树(赫夫曼树) 6.6.2 赫夫曼编码 6.7 回溯法与树的遍历 6.8 树的计数 第7章 图 7.1 图的定义和术语 7.2 图的...

    计算机专业数据结构设计课件

    森林与二叉树的转换 3.树和森林的遍历 (四)树的应用 1.等价类问题 2.哈夫曼(Huffman)树和哈夫曼编码 三、图 (一)图的概念 (二)图的存储及基本操作 1.邻接矩阵法 2.邻接表法 (三)图的遍历 1.深度优先...

    java算法与数据结构

    (5)树、二叉树与森林的转化方法 (6)哈夫曼树 (7)二叉排序树及平衡化 (8)堆排序树 (9)B-树 4.图形结构 (1)图的定义及存储结构 (2)图的深度优先和广度优先遍历。 (3)无向图的连通性和最小生成树 (4...

    CCF中学生计算机程序设计提高篇(完整版)

    2.4 树、森林与二叉树的转化. 2.5 哈夫曼树及其应用 2.6 二叉堆及其应用 2.7 二叉排序树及其应用.. 本章小结 第3章集合与并查集 3.1 集合与并查集...... 3.2 并查集的基本操作 3.3并查集的应用 本章小结 第4章图及其...

    原创数据结构Flash演示动画(46个算法演示)

    串的顺序存储、单链表结点的插入、单链表结点的删除、堆排序、二叉排序树的删除、二叉排序树的生成、二叉树的建立、二分查找、归并排序、基数排序、快速排序、邻接表表示的图的广度优先遍历、邻接表表示的图的深度...

    数据结构算法-Demo

    串的顺序存储、单链表结点的插入、单链表结点的删除、堆排序、二叉排序树的删除、二叉排序树的生成、二叉树的建立、二分查找、归并排序、基数排序、快速排序、邻接表表示的图的广度优先遍历、邻接表表示的图的深度...

    基于C++ 哈夫曼编码 实现(控制台)文件加密系统【100010605】

    由二叉树变为三叉树(森林),减少了编码文件的空间,并且在编码过程中我们采用动态分配叶子的方法,一旦密码本中的字符计数出现增加或者减少,或者说密码本中字符的顺序发生改变,生成的012串也会相应的做出改变,...

Global site tag (gtag.js) - Google Analytics