`

用二叉树生成森林

    博客分类:
  • 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

分享到:
评论

相关推荐

    二叉树、树、森林的java读写操作

    例如,可以使用`FileReader`和`BufferedReader`读取文件,用`FileWriter`和`BufferedWriter`写入文件。同时,`ObjectOutputStream`和`ObjectInputStream`可以用于序列化和反序列化Java对象,但这种方式通常不适用于...

    二叉树以及树和森林的遍历及应用

    通过构建最小带权路径长度的二叉树,可以生成效率高的编码方案,使频繁出现的字符占用更短的编码。 学习和掌握二叉树及其遍历对于任何IT专业人员来说都是至关重要的,因为它们在数据结构和算法的设计中扮演着核心...

    二叉树习题

    此外,还要能够解决具体问题,如求二叉树的结点平均值、交换子树、构造二叉树、找到后根遍历的第一个结点、非递归后根遍历、确定结点层次,以及构建哈夫曼树和生成哈夫曼编码。完成这些任务有助于深化对二叉树的理解...

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

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

    二叉树模版

    在实际应用中,二叉树模版不仅可以用于解决传统的计算机科学问题,还可以扩展到其他领域,如人工智能中的决策树、机器学习中的随机森林等。熟悉并精通这些模版,将大大提高编程效率和解决问题的能力。

    树和二叉树(4)数和森林.pdf

    反过来,任何一棵二叉树也可以转换为森林,只需将右子树为空的节点作为树的根节点即可。 七、应用实例 二叉树在计算机科学中具有广泛的应用,如用于存储和处理具有层次关系的数据(如文件系统、组织结构图等)、...

    数据结构实验资料 二叉树的建立和遍历

    * 建立一棵二叉树并分别用先根、中根、后根遍历的算法 * 建立一棵线索二叉树并寻找某结点的前驱和后继算法 * 建立一棵二叉排序树并用中序遍历的算法 实验三图的建立和遍历: * 掌握图的三种存储结构 * 掌握图邻接...

    数据结构 树 二叉树

    6. 树与森林:森林是由多棵树组成的集合,可以转化为对应的二叉树表示,反之亦然。在森林中也有相应的遍历方式。 理解并熟练掌握树和二叉树的概念、性质、遍历方法以及相关操作,是学习数据结构和算法的关键,对...

    树与二叉树ppt课件PPT学习教案.pptx

    * Create(x,lbt,rbt):生成一棵以x为根结点的数据域信息,以lbt和rbt为左、右子树的二叉树。 * InsertL(x,Parent):将数据域信息为x的结点插入到二叉树中,插入位置是结点Parent的左孩子结点。 * DeleteL(bt,Parent)...

    数据挖掘之随机森林算法实验报告 (2).docx

    随机森林的生成规则包括:(1) 使用Bootstrap抽样方法从原始训练集构造子集;(2) 每棵树在分裂时只考虑随机选取的一部分特征;(3) 让每棵树尽可能地生长,不进行剪枝。这种随机性引入增强了模型的多样性和鲁棒性。 ...

    树和二叉树

    7. 树、森林与二叉树的转换:通过左孩子右兄弟表示法可以将一般的树或森林转换为二叉树,反之亦然。 8. 哈夫曼树和编码:哈夫曼树是一种带权路径长度最短的二叉树,也称为最优二叉树。哈夫曼编码是根据哈夫曼树生成...

    数据结构二叉树教学PPT学习教案.pptx

    在二叉树中,森林可以通过二叉链表的形式表示,每个树的根节点作为链表中的一个节点,而森林的表示则通过根节点的子节点链表来体现。 **6.7 树和森林的遍历** 森林的遍历类似于单棵树的遍历,但需要处理多个根节点...

    常见二叉树的操作

    计算森林(多个无根二叉树)的叶子个数,需要对每棵树进行叶子计数。 6. **中序线索二叉树**:在二叉链表中插入线索,使得中序遍历可以连续进行,无需借助栈。线索化过程涉及修改节点的指针,使其既能表示子节点...

    数据结构之树与二叉树

    此外,还有有序树、无序树、森林等概念,以及孩子、双亲、子孙、祖先、兄弟等关系的定义。 接着,我们转向“二叉树”,它是树的一个特例,每个结点最多有两个子结点,分别称为左子结点和右子结点。二叉树也有多种...

    树与二叉树PPT课件.pptx

    在这个PPT课件中,涵盖了五个关键知识点:树的基本概念、二叉树的基本概念、哈夫曼树与哈夫曼编码、二叉树的遍历以及树与森林。 首先,树是一种抽象的数据结构,它由n个节点构成,其中n可以是0。当n为0时,我们称之...

    合工大数据结构实验 树和森林

    例如,Dijkstra算法和Prim算法都用到了最小生成树的概念,它们在寻找网络中最短路径或构建成本最低的连接时发挥着关键作用。 总的来说,"合工大数据结构实验 - 树和森林"旨在通过实践让学生掌握树和森林的数据结构...

    JPNW.rar_C 二叉树算法_人工智能/神经网络/深度学习

    "二叉树.opt"和"c.opt"可能包含了编译器的优化设置,这些设置可以影响代码的生成方式,比如是否开启O2优化,或者选择其他性能相关的编译选项。"二叉树.plg"文件可能是编译器产生的编译日志或项目状态信息。 在人工...

    树和二叉树ABPPT学习教案.pptx

    - **转换**:树与二叉树之间可以通过特定操作互相转换,例如森林可以转换为二叉树,反之亦然。 5. **赫夫曼树及其应用**: - **赫夫曼树(Huffman Tree)**:是一种带权路径长度最短的二叉树,常用于数据压缩。 ...

Global site tag (gtag.js) - Google Analytics