`
西蜀石兰
  • 浏览: 118971 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

多叉树的遍历

 
阅读更多
前段时间面试遇到多叉树遍历的问题,当时想了很久,下午看java源码时,看到Path以及File的设计,瞬间想通了其中的关键点。

遍历的关键点不是遍历思想,而是如何去处理某个节点。

这里采用堆存储,也就是先进后出的存储模式,具体代码为每次处理list最后一个节点。

处理方式为:如果该节点不存在子文件夹,打印该节点的所有文件;如果该节点存在子文件夹,删除该节点的最后一个子文件夹后,将该节点重新入堆,然后将子节点入堆。

以下为具体代码:
package workFiles;

import java.util.LinkedList;

/**
 * 模拟文件类,包括文件夹和文件
 */
public class File {
	private LinkedList<File> folders;
	
	private LinkedList<String> files;

	public LinkedList<File> getFolders() {
		return folders;
	}

	public void setFolders(LinkedList<File> folders) {
		this.folders = folders;
	}

	public LinkedList<String> getFiles() {
		return files;
	}

	public void setFiles(LinkedList<String> files) {
		this.files = files;
	}
}



package workFiles;

import java.util.LinkedList;

public class WalkTree {
	
	public static void main(String[] a){
		LinkedList<File> list = new LinkedList<>();
		File f = createTree();
		list.add(f);
		while(list.size()!=0){
			readList(list);
		}
	}
	//处理堆
	static LinkedList<File> readList(LinkedList<File> list){
		//获取栈中最后的节点
		File f = list.removeLast();
		//如果当前节点存在文件夹
		if(f.getFolders()!=null&&f.getFolders().size()!=0){
			//去掉当前节点的文件夹
			File next = f.getFolders().removeLast();
			//重新存入当前节点
			list.add(f);
			//存入新节点
			list.add(next);	
		}
		else{
			if(f.getFiles()!=null&&f.getFiles().size()!=0){
				for(int i=0;i<f.getFiles().size();i++){
					System.out.println(f.getFiles().get(i));
				}
			}
			
		}
		return list;
	}
	//模拟创建文件夹
	static File createTree(){
		File A =new File();
		File B =new File();
		File C =new File();
		LinkedList<String> str1 = new LinkedList<String>();
		str1.add("A文件1");
		A.setFiles(str1);
		
		LinkedList<String> str2 = new LinkedList<String>();
		str2.add("B文件1");
		str2.add("B文件2");
		B.setFiles(str2);
		
		LinkedList<String> str3 = new LinkedList<String>();
		str3.add("C文件1");
		str3.add("C文件2");
		str3.add("C文件3");
		C.setFiles(str3);
		LinkedList<File> temp = new LinkedList<File>();
		temp.add(B);
		temp.add(C);
		A.setFolders(temp);
		return A;
	}
}

分享到:
评论

相关推荐

    基于Python的多叉树遍历算法.zip

    本资料包"基于Python的多叉树遍历算法.zip"主要探讨如何在Python中实现多叉树的遍历算法。下面我们将详细讨论多叉树的概念、遍历方法以及如何用Python来实现这些算法。 一、多叉树的基本概念 多叉树是由节点和边...

    三叉树多叉树遍历

    三叉树多叉树遍历 c# 2.0

    多叉树 遍历

    在IT领域,多叉树是一种数据结构,它...总之,多叉树遍历是理解和操作这种数据结构的关键。通过掌握不同类型的遍历方法,我们可以有效地在多种IT场景中利用多叉树解决问题,无论是数据处理、搜索算法还是其他复杂任务。

    多叉树的遍历,可以打印出树形结构,也可以只打印叶节点,或打印指定层的节点(一位德国教授写的)

    ### 多叉树遍历与结构解析 #### 概述 多叉树作为一种重要的数据结构,在计算机科学领域有着广泛的应用。本文将详细介绍一种基于C++实现的多叉树容器类`tree.hh`,该库由Kasper Peeters开发,并遵循GNU通用公共许可...

    java多叉树的实现和遍历输出

    本篇文章将深入探讨如何在Java中实现多叉树以及其遍历方法。 首先,我们需要定义一个多叉树节点类。这个类通常包含一个数据字段来存储节点值,以及一个ArrayList或LinkedList等动态数组来存储子节点。以下是一个...

    JavaScript实现多叉树的递归遍历和非递归遍历算法操作示例

    本文实例讲述了JavaScript实现多叉树的递归遍历和非递归遍历算法操作。分享给大家供大家参考,具体如下: 演示之前的准备工作 演示项目的文件结构: index.html jsonData.js recurrenceTree.js noRecurrenceTree.js ...

    分层建立多叉树及分层遍历输出

    本文将深入探讨如何使用C++语言分层建立一个多叉树,并进行分层遍历输出。在此过程中,我们将特别关注在奇数节点位置插入偶数节点的策略,以满足特定的输出格式要求。 首先,我们需要理解多叉树的概念。与二叉树...

    多叉树的后序非递归遍历

    多叉树的建立以及后序非递归遍历,希望对学习数据结构的同学有所帮助,也对树一部分有更深的了解。

    多叉树的树形显示

    3. **遍历**:类似于二叉树,多叉树也可以进行前序、中序和后序遍历,但定义会稍微复杂些,因为子节点数量不固定。 4. **深度优先搜索(DFS)**和**广度优先搜索(BFS)**:这两种遍历方法同样适用于多叉树,DFS沿着...

    树状数据(多叉树)在数据库中存储的示例源码

    多叉树是树结构的一种变体,每个节点可以有多个子节点,区别于二叉树(每个节点最多两个子节点)。在数据库中存储树状数据时,我们需要考虑如何有效地表示和操作这种结构。本文将围绕"树状数据(多叉树)在数据库中...

    多叉树的设计、建立、层次优先遍历和深度优先遍历

    首先将根节点入队列,然后检测队列是否为空,如果不为空,将队列出队列,访问出队列的节点,然后将该节点的子节点指针入队列,依次循环下去,直至队列为空,终止循环,从而完成整个多叉树的层次优先遍历。

    基于顺序存储实现的多叉树容器

    1. 前序遍历:这是树遍历的一种常见方法,先访问根节点,然后遍历左子树,最后遍历右子树。在多叉树中,这个顺序变为访问根节点,然后遍历所有子节点。前序迭代器会按照这个顺序提供节点。 2. 后序遍历:后序遍历的...

    自己用C语言实现的拓扑多叉树

    3. **遍历多叉树**:实现深度优先搜索(DFS)或广度优先搜索(BFS)来访问树的所有节点。DFS可以使用递归或栈来实现,BFS则通常使用队列。 4. **查找节点**:根据给定的数据值查找特定的节点。 5. **删除节点**:...

    javascript数据结构之多叉树经典操作示例【创建、添加、遍历、移除等】

    4. 遍历多叉树:多叉树的遍历可以分为深度优先遍历(DF)和广度优先遍历(BF)。深度优先遍历是从根节点开始,尽可能沿着树的深度遍历节点,而广度优先遍历则是从根节点开始,逐层从左到右遍历节点。这两种遍历方法...

    多叉树的实现

    ### 多叉树的实现详解 #### 一、概述 多叉树是一种常见的数据结构,在计算机科学领域有广泛的应用场景,比如在机器学习中的决策树、数据库索引、文件系统等。多叉树与二叉树相比,节点可以拥有两个以上的子节点。...

    TreeNde 多叉树

    在"TreeNde 多叉树"这个主题中,我们将深入探讨如何动态生成多叉树、自动化遍历以及生成XML文本的实现方法。 首先,动态生成多叉树是指在程序运行时根据特定需求或数据构建树结构。这通常涉及到递归算法,因为树的...

    后序遍历多叉树.rar

    在C#中实现多叉树的后序遍历,首先需要定义一个树节点类,包含节点值和子节点列表。例如: ```csharp public class TreeNode { public int Value { get; set; } public List&lt;TreeNode&gt; Children { get; set; } ...

    多叉树构造器

    可以用来构造不同类型的树,并显示出来,可按非递归的方法进行遍历,遍历分两种方法,广度优先搜索和深度优先搜索。代码中有详细说明。在readme.txt有一些相关介绍。 程序在vc6,vs2005环境下编译通过。

    家谱图-多叉树-c语言-数据结构

    这两种方法都有前序、中序和后序遍历,但对多叉树来说,这些术语的含义可能有所不同,因为没有固定的“左”和“右”。 4. **查找和删除节点**:实现查找特定人员的功能,以及删除某个节点的功能。查找可能涉及DFS或...

    课程设计多叉树图书管理

    层次遍历是多叉树操作中常用的方法,通常包括前序遍历、中序遍历和后序遍历。在图书管理系统中,前序遍历可能先访问书名,然后是作者和出版信息;中序遍历可能按照某种特定的排序规则进行;后序遍历可能用于处理子...

Global site tag (gtag.js) - Google Analytics