1. 程式人生 > >JAVA用樹結構實現目錄系統

JAVA用樹結構實現目錄系統

1使用 第一個兒子/下一兄弟表示法 來表示樹

樹節點定義如下:

private class TreeNode
    {
        String data;
        TreeNode firstChild;
        TreeNode nextSibling;
        public TreeNode(String data, TreeNode  firstChild,
                TreeNode nextSibling) {
            super();
            this.data = data;
            this
.firstChild = firstChild; this.nextSibling = nextSibling; } }

如下圖所示:
這是一棵樹
這是一棵樹
這是 上圖所表示的樹的第一兒子/下一兄弟表示法
這是 上圖所表示的樹的第一兒子/下一兄弟表示法

import java.io.File;

/*
 * 
 * 
 */
public class P78_tree//儲存指定資料夾所有檔名的 樹類
{
    private TreeNode root=new TreeNode(null, null, null);//樹根(相當於連結串列的頭指標)
public TreeNode getRoot()//獲取樹根 { return root; } /* * 函式名:getFile * 作用:實現將指定資料夾的所有檔案存入樹中 */ public void getFile(String path,TreeNode treeNode) { File file=new File(path); File[] array=file.listFiles(); TreeNode newNode=null; for
(int i=0;i<array.length;i++) { newNode=new TreeNode(array[i].getName(),null, null); //判斷當前節點有沒有firstChild,沒有的話為其新增一個 if (treeNode.firstChild==null) { if (array[i].isFile()) treeNode.firstChild=newNode; if (array[i].isDirectory()) { treeNode.firstChild=newNode; getFile(array[i].getPath(), newNode); } } //當前節點已經存在firstChild,所以後面的都是firstChild節點的兄弟 else { TreeNode p=treeNode.firstChild; while(p.nextSibling!=null) p=p.nextSibling; if (array[i].isFile()) p.nextSibling=newNode; if (array[i].isDirectory()) { p.nextSibling=newNode; getFile(array[i].getPath(), newNode); } } } } /* * 函式名:printTree * 作用:輸出樹中的內容 */ public void printTree(TreeNode root,int deep) { if (root.data!=null) //這個if是為了區分root節點,因為root節點data=null { for (int i = 0; i < deep; i++)//輸出前置空格 System.out.print(" "); System.out.println(root.data); } //畫一下圖,就能理解這個兩個if if (root.firstChild!=null) printTree(root.firstChild, deep+1); if (root.nextSibling!=null) printTree(root.nextSibling, deep); } //樹節點兩個指標,一個指向第一個兒子 一個指向兄弟 private class TreeNode//樹節點類 { String data; TreeNode firstChild;//第一兒子鏈 TreeNode nextSibling;//下一兄弟鏈 //構造器 public TreeNode(String data, TreeNode firstChild,TreeNode nextSibling) { super(); this.data = data; this.firstChild = firstChild; this.nextSibling = nextSibling; } } public static void main(String[] args) { P78_tree test=new P78_tree(); test.getFile("/Users/XXY/Desktop/test",test.getRoot()); test.printTree(test.root, 0); } }