`
zqc53
  • 浏览: 26063 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

算法1 : 递归

阅读更多

一个简单的递归程序,它读取给定目录下所有文件,然后以树型的方式在屏幕上打印出来.昨天断断续续得花了1个多小时写出来

读取文件

package  test;
import  java.io. * ;
import  java.util. * ;

/** */ /**
 *   Put files into a tree
 * 
*/

public   class  ReadFilesAndBuiltTree  {
    
    
static   class  Node {
        
private  Node father;
        
private  List children;
        
private  File data;
        
public  Node() {
            children 
=   new  Vector();
        }

        
public  File getData()  {
            
return  data;
        }

        
public   void  addChild(Node c) {
            
this .getChildren().add(c);
        }

        
public   void  setData(File data)  {
            
this .data  =  data;
        }

        
public  List getChildren()  {
            
return  children;
        }

        
public   void  setChildren(List children)  {
            
this .children  =  children;
        }

        
public  Node getFather()  {
            
return  father;
        }

        
public   void  setFather(Node father)  {
            
this .father  =  father;
        }

        
public   boolean  hasChildren() {
            
return  children.size() > 0 ;
        }

        
public  Node getChile( int  index) {
            
return  (Node)children.get(index);
        }

        
public  Node getChild(String fname) {
            Iterator i 
=  getChildren().iterator();
            
while (i.hasNext()) {
                Node bn 
=  (Node)i.next();
                String n 
=  
                    bn.getData().getName();
                
if (n.equals(fname)) return  bn;
            }

            
return   null ;
        }

        
public  List getDirChildren() {
            List c 
=   new  Vector();
            
for ( int  i  =   0  ; i  < children.size();i ++ ) {
                Node n 
=  (Node)children.get(i);
                
if (
                  n.getData().isDirectory()        
                )c.add(n);
            }

            
return  c;
        }

        
public  List getFileChildren() {
            List c 
=   new  Vector();
            
for ( int  i  =   0  ; i  < children.size();i ++ ) {
                Node n 
=  (Node)children.get(i);
                
if (
                  
! n.getData().isDirectory()        
                )c.add(n);
            }

            
return  c;
        }

    }

    
    
private  ReadFilesAndBuiltTree() {}
    
    
public   static  Node getTree(File rootDir) {
        Node r 
=   new  Node();
        r.setData(rootDir);
        
return   new  ReadFilesAndBuiltTree().builtTree(r);
    }

    
    
private  Node builtTree(Node root) {
        
if ( ! root.getData().isDirectory()) return  root;
        File f 
=  root.getData();
        File[] fs 
=  f.listFiles();
        
for ( int  i  =   0  ; i  <  fs.length ; i ++  ) {
            File ff 
=  fs[i];
            Node n 
=   new  Node();
            n.setData(ff);
            n.setFather(root);
            root.addChild(builtTree(n));
        }

        
return  root;
    }

    
    
public   static   void  main(String[] args) throws  Exception {
        Node root 
=  getTree( new  File(ShowFileDir.ROOT_DIR));
        Node cn 
=  root.getChild( " maps " );
        System.out.println(cn.getChildren().size());
    }

    
}


输出文件
package test;
import java.io.File;
import java.util.Iterator;
import java.util.List;

import test.ReadFilesAndBuiltTree.Node;

/** *//**
 *  Print the tree to screen
 * 
*/

public class ShowFileDir {
    
    
public static String ROOT_DIR = "E:/y音乐";
    
    
public ShowFileDir(){
    }

    
    
public void printNodes(){
       Node root 
= ReadFilesAndBuiltTree.getTree(new File(ROOT_DIR));
       printNode(root,
0);
    }

    
    
private void printNode(Node root,int depth){
        
if(!root.hasChildren())return;
        pd(root.getData().getName(),depth);
        pindent(
++depth);
        List l 
= root.getFileChildren();
        pc(l,depth);
        l 
= root.getDirChildren();
        
for(int i = 0 ; i < l.size() ; i++){
            Node c 
= (Node)l.get(i);
            printNode(c,depth);
        }

    }

    
// Screen methods    
    private void pc(List l,int count){
        Iterator i 
= l.iterator();
        
while(i.hasNext()){
            Node n 
= (Node)i.next();
            pp(count);
            p(
"+"+n.getData().getName()+"\n");
        }

    }

    
分享到:
评论

相关推荐

    C#用递归算法实现:一列数的规则如下: 1、1、2、3、5、8、13、21、34,求第30位数是多少

    /// 一列数的规则如下: 1、1、2、3、5、8、13、21、34求第30位数是多少, 用递归算法实现。(C#语言) /// /// &lt;param name=pos&gt;&lt;/param&gt; /// &lt;returns&gt;&lt;/returns&gt; public int GetNumberAtPos(int pos) { if(pos==0|...

    VC对磁盘文件遍历搜索的递归算法和非递归算法

    在VC++(Visual C++)环境中,有多种方法可以实现这一目标,其中最常见的是递归算法和非递归算法。这两种方法各有优缺点,适用于不同的场景。 **递归算法**: 递归算法是一种基于函数自身调用解决问题的方法。在...

    acm递归算法总结竞赛

    1. **递归定义**:递归算法是函数或过程通过调用自身来解决问题的一种方法。每次调用都将问题分解为更小的部分,直到达到基本情况。 2. **基本原理**:递归算法通常包括两个部分:递归规则(如何将大问题分解为小...

    c语言 二叉树应用:创建、递归非递归遍历、计算结点、分支、交换子树

    非递归中序遍历二叉树(算法2): 层次遍历二叉树: 递归计算单分支结点: 递归计算双分支结点: 递归计算叶子数: 二叉数的深度: 交换二叉树的左右子树: 二叉树已左右交换。 递归先序遍历二叉树: 递归...

    程序员必备的基本算法:递归详解.pdf

    在IT行业中,算法是程序员解决问题的关键工具之一,而递归是算法中的一种重要概念。递归是指函数或程序调用自身的过程,它通常用于解决具有相同结构的问题子集。理解并掌握递归对于任何程序员来说都是必备技能。 ...

    二叉树的遍历的算法:递归与非递归

    1. **前序遍历**(Preorder Traversal):首先访问根节点,然后递归地遍历左子树,最后遍历右子树。用递归表示为:访问根 -&gt; 左子树 -&gt; 右子树。 2. **中序遍历**(Inorder Traversal):在二叉搜索树中,中序遍历...

    事业单位考试计算机基础知识:递归算法之解决问题的特点.docx

    在计算机科学领域,递归算法是一种强大的问题解决方法,它基于函数或过程在执行过程中调用自身的技术。在事业单位考试的计算机基础知识部分,理解和掌握递归算法的特点至关重要。以下是递归算法的一些关键点: 1. *...

    5!递归算法和非递归算法

    递归算法和非递归算法 在计算机科学与编程领域中,递归算法与非递归算法是两种非常重要的计算方法。本文将详细介绍这两种算法的特点、应用场景以及如何实现它们,特别针对初学者及面试准备者。 #### 递归算法 ...

    递归算法应用:删除某一个节点的子树算法

    递归算法应用:删除某一个节点的子树算法 递归算法是计算机科学中的一种重要算法设计技术,通过将问题分解成更小的子问题,以解决复杂的问题。在数据结构中,递归算法广泛应用于树形结构的操作,例如二叉树的遍历、...

    递归算法与非递归转化

    2. 递归算法递归越深,占用栈空间也就越多,相对而言,非递归占用的栈空间少。效率比较高。 递归算法和非递归算法的转换: 递归算法和非递归算法可以相互转换。将递归算法转换为非递归算法有两种方法,一种是直接...

    中序遍历二叉树非递归算法

    在IT领域,尤其是在数据结构与算法的学习中,中序遍历二叉树的非递归算法是一个关键且实用的知识点。通常,我们首先通过递归来实现二叉树的遍历,但递归方法可能因深度过大导致栈溢出,因此掌握非递归版本的遍历算法...

    汉诺塔问题的非递归算法

    非递归算法解决了这个问题,提供了一个不同于传统递归解决方案的方法。对于n个圆盘的情况,非递归算法的核心在于通过交替执行两个步骤来移动圆盘: 1. **步骤1**:根据圆盘数量的奇偶性,按顺时针方向将圆盘1从当前...

    数据结构:第6章 递归.pdf

    1. 算法简洁:递归算法可以将复杂的问题分解成更小的子问题,使代码简洁易读。 2. 问题分解:递归算法可以将问题分解成更小的子问题,从而提高算法的效率。 3. 易于维护:递归算法的代码易于维护和修改。 递归函数...

    背包问题递归算法及非递归算法的C++实现

    背包问题递归算法及非递归算法的C++实现,问题描述:一个背包能盛放的物品总重量为S,设有n件物品,其重量分别为w1,…,wn,从n件物品中选择若干,使得重量恰好为S

    .net 递归算法 .net 递归算法.net 递归算法

    1. **基础情况(Base Case)**:这是递归调用终止的条件,当达到这个条件时,不再进行递归调用,而是直接返回结果。基础情况通常是问题的最简单形式,可以直接求解。 2. **递归情况(Recursive Case)**:这是函数...

    递归算法ppt让你快速上手

    1. 递归的定义:若一个对象部分地包含它自己,或用它自己给自己定义,则称这个对象是递归的;若一个过程直接地或间接地调用自己,则称这个过程是递归的过程。 2. 递归算法的应用场景:递归算法常用于解决以下三种...

    C 语言程序设计:递归与分治策略.ppt

    例 1:阶乘函数 阶乘函数可以递归地定义为: 00)!1(1!nnnnn 边界条件:n=0时,结果为1 递归方程:n!=n*(n-1)! 例 2:Fibonacci 数列 Fibonacci 数列是一个无穷数列:1, 1, 2, 3, 5, 8, 13, 21, ...

    程序设计中递归算法

    ### 递归算法在程序设计中的应用 #### 一、递归的概念与本质 递归是一种重要的编程思想,在计算机科学和数学领域都有广泛的应用。它指的是一个过程或函数直接或间接地调用自身来解决问题的方法。递归的核心在于将...

    易语言递归算法1

    在"易语言递归算法1"中,我们主要关注的是递归算法的应用。递归是计算机科学中一种强大的工具,它通过函数或过程自身调用自身的方式来解决问题。 递归算法通常包括两个基本部分:基本情况(Base Case)和递归情况...

    递归算法与循环算法的分析

    1. 递归算法的定义:在程序设计中,在调用一个函数的过程中又出现直接或间接调用其函数本身的现象。 2. 循环算法的定义:在程序设计中,一个功能的实现需要不断的变化,有穷的循环判断条件,符合条件就继续循环,不...

Global site tag (gtag.js) - Google Analytics