最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java的二叉樹排序以及遍歷文件展示文本格式的文件樹

 更新時(shí)間:2015年11月25日 08:59:06   作者:sunxing007  
這篇文章主要介紹了Java的二叉樹排序以及遍歷文件展示文本格式的文件樹,是對(duì)二叉樹結(jié)構(gòu)學(xué)習(xí)的兩個(gè)很好的實(shí)踐,需要的朋友可以參考下

Java二叉樹排序算法
排序二叉樹的描述也是一個(gè)遞歸的描述, 所以排序二叉樹的構(gòu)造自然也用遞歸的:
排序二叉樹的3個(gè)特征:
1:當(dāng)前node的所有左孩子的值都小于當(dāng)前node的值;
2:當(dāng)前node的所有右孩子的值都大于當(dāng)前node的值;
3:孩子節(jié)點(diǎn)也滿足以上兩點(diǎn)

package test.sort; 
 
public class BinaryNode { 
 private int value;//current value 
 private BinaryNode lChild;//left child 
 private BinaryNode rChild;//right child 
  
 public BinaryNode(int value, BinaryNode l, BinaryNode r){ 
  this.value = value; 
  this.lChild = l; 
  this.rChild = r; 
 } 
  
 public BinaryNode getLChild() { 
  return lChild; 
 } 
 public void setLChild(BinaryNode child) { 
  lChild = child; 
 } 
 public BinaryNode getRChild() { 
  return rChild; 
 } 
 public void setRChild(BinaryNode child) { 
  rChild = child; 
 } 
 public int getValue() { 
  return value; 
 } 
 public void setValue(int value) { 
  this.value = value; 
 } 
  
 //iterate all node. 
 public static void iterate(BinaryNode root){ 
  if(root.lChild!=null){ 
   iterate(root.getLChild()); 
  } 
  System.out.print(root.getValue() + " "); 
  if(root.rChild!=null){ 
   iterate(root.getRChild()); 
  } 
 } 
  
 /** 
  * add child to the current node to construct a tree. 
  * Time: O( nlog(n) ) 
  * **/ 
 public void addChild(int n){ 
  if(n<value){ 
   if(lChild!=null){ 
    lChild.addChild(n); 
   } 
   else{ 
    lChild = new BinaryNode(n, null, null); 
   } 
  } 
  else{ 
   if(rChild!=null){ 
    rChild.addChild(n); 
   } 
   else{ 
    rChild = new BinaryNode(n, null, null); 
   } 
  } 
 } 
  
 //test case. 
 public static void main(String[] args){ 
  System.out.println(); 
  int[] arr = new int[]{23,54,1,65,9,3,100}; 
  BinaryNode root = new BinaryNode(arr[0], null, null); 
  for(int i=1; i<arr.length; i++){ 
   root.addChild(arr[i]); 
  } 
  BinaryNode.iterate(root); 
 } 
} 

Java遍歷文件展示文本格式的文件樹
用java寫一個(gè)代碼變歷文件樹,打印出結(jié)構(gòu),類似在cmd輸入命令tree的結(jié)果。
本來覺得很簡單,做的時(shí)候才知道有點(diǎn)難。要是感興趣, 你也可以試試。

package test.io;
//在網(wǎng)上找的,聽說還是老字竹原創(chuàng)。代碼簡潔,但是我費(fèi)了好大的功副消化
import java.util.ArrayList;
import java.util.List;
public class Folder {
 public Folder(String title) {
  this.title = title;
 }
 private String title;
 private List<Folder> children = new ArrayList<Folder>();
 public void addChild(Folder f) {
  children.add(f);
 }
 public List<Folder> getChildren() {
  return children;
 }
 public void setChildren(List<Folder> children) {
  this.children = children;
 }
 public String getTitle() {
  return title;
 }
 public void setTitle(String title) {
  this.title = title;
 }
 public String toString(String lftStr, String append) {
  StringBuilder b = new StringBuilder();
  b.append(append + title);
  b.append("/n");
  if (children.size() > 0) {
   for (int i = 0; i < children.size() - 1; i++) {
    b.append(lftStr+ children.get(i).toString(lftStr + "│ ", 
"├-"));
   }
   b.append(lftStr+ children.get(children.size() - 1).toString(lftStr + 
" ","└-"));
  }
  return b.toString();
 }
 public static void main(String[] args) {
  Folder root = new Folder("菜單列表");
  Folder f1 = new Folder("開始菜單");
  root.addChild(f1);
  Folder f1_1 = new Folder("程序");
  f1.addChild(f1_1);
  Folder f1_1_1 = new Folder("附件");
  f1_1.addChild(f1_1_1);
  Folder f1_1_1_1 = new Folder("娛樂");
  f1_1_1.addChild(f1_1_1_1);
  Folder f1_1_1_2 = new Folder("娛樂2");
  f1_1_1.addChild(f1_1_1_2);
  Folder f1_2 = new Folder("輔助工具");
  f1.addChild(f1_2);
  System.out.println(root.toString(" ", "$"));
 }
}
//**************************************
//經(jīng)過消化之后我修改的??纱蛴∥募Y(jié)構(gòu)
import java.io.*; 
public class DocTree { 
 File root = null; 
  
 public DocTree(File f){ 
  this.root = f; 
 }
  
 public static void main(String[] args){ 
  File root = new File("c://test"); 
  DocTree tree = new DocTree(root); 
  System.out.println(tree.toString(" ", "")); 
 } 
  
 public String toString(String leftStr, String append){ 
  StringBuilder b = new StringBuilder(); 
  b.append(append + root.getName()); 
  b.append("/n");
  if(!root.isFile()&&root.listFiles().length!=0){ 
   File[] files = root.listFiles(); 
   DocTree[] docTrees = new DocTree[files.length]; 
   for(int i=0; i<docTrees.length; i++){ 
    docTrees[i] = new DocTree(files[i]); 
   } 
   for (int i=0; i<files.length-1; i++){ 
    b.append(leftStr + docTrees[i].toString(leftStr+"│", "├")); 
   } 
   b.append(leftStr + docTrees[docTrees.length-1].toString(leftStr + " ", "└")); 
  } 
  return b.toString(); 
 }
}
//*****************************************
//然后我還是覺得理解起來不方便, 過幾天說不定就忘記了,
//還是自己寫一個(gè), 雖然思想照抄, 但我覺得自己的理解起來很方便。
//帶注釋,
import java.io.*;
public class Tree {
 File root = null;
 public Tree(File f){
  this.root = f;
 }
 /**
 test
 ├1
 │├目錄1.txt
 │├目錄11
 ││├111.txt
 ││└112.txt
 │└12
 └test.pdf
  */
 /**
  * @param root 當(dāng)前正在被掃描的根文件
  * @param childLeftStr 如果該文件有孩子,childLeftStr
  *  表示孩子節(jié)點(diǎn)的左面應(yīng)該打印出來的結(jié)構(gòu)性信息
  *  拿上面的例子來說,根結(jié)點(diǎn)test的孩子的左面的
  *  結(jié)構(gòu)信息為"" 空,結(jié)點(diǎn)"目錄11"的孩子的結(jié)構(gòu)信息為"││",
  * @param junction 結(jié)點(diǎn)圖標(biāo),如果是該結(jié)點(diǎn)是它父親的最后一個(gè)結(jié)點(diǎn),
  *  則為"└",否則為"├".
  */
 
 public void showTree(File root, String childLeftStr, String junction){
  //打印結(jié)點(diǎn)的信息
  System.out.println(junction + root.getName());
  //如果有孩子, 而且孩子的數(shù)目不為0
  if(!root.isFile()&&root.listFiles().length!=0){
   File[] files = root.listFiles();
   //構(gòu)造孩子結(jié)點(diǎn)
   Tree[] children = new Tree[files.length];
   for(int i=0; i<files.length; i++){
    children[i] = new Tree(files[i]);
   }
   //打印孩子結(jié)點(diǎn)
   for(int i=0; i<children.length-1; i++){
    //對(duì)所有的孩子結(jié)點(diǎn),先打印出左邊的結(jié)構(gòu)信息,
    System.out.print(childLeftStr);
    //遞歸調(diào)用showTree, 注意參數(shù)有所變化,文件加的深度增加的時(shí)候
,它的孩子的結(jié)構(gòu)信息也會(huì)
    //增加,如果不是最后一個(gè)孩子,則結(jié)構(gòu)信息需加上"│"。
    showTree(children[i].root,childLeftStr+"│", "├");
   }
   //最后一個(gè)孩子需要特殊處理
   //打印結(jié)構(gòu)信息
   System.out.print(childLeftStr);
   //如果是最后一個(gè)孩子,則結(jié)構(gòu)信息需加上" "。
   //結(jié)點(diǎn)形狀也調(diào)整為"└"
   showTree(children[files.length-1].root, childLeftStr+" ","└");
  }
 }
 public static void main(String[] args) {
  File f = new File("C://test");
  Tree t = new Tree(f);
  t.showTree(f,"", "");
 }
}

相關(guān)文章

  • springcloud注冊(cè)hostname或者ip的那些事

    springcloud注冊(cè)hostname或者ip的那些事

    Spring cloud是一個(gè)基于Spring Boot實(shí)現(xiàn)的服務(wù)治理工具包,在微服務(wù)架構(gòu)中用于管理和協(xié)調(diào)服務(wù)的。這篇文章主要介紹了springcloud注冊(cè)hostname或者ip,需要的朋友可以參考下
    2019-11-11
  • SpringBoot讀取配置文件的四種方式

    SpringBoot讀取配置文件的四種方式

    在 Spring Boot 中,application.yml 文件用于配置應(yīng)用程序的屬性,Spring Boot 默認(rèn)會(huì)從 src/main/resources 目錄下的 application.properties 或 application.yml 文件中讀取配置,本文介紹了SpringBoot讀取配置文件的四種方式,需要的朋友可以參考下
    2024-08-08
  • 解決一個(gè)JSON反序列化問題的辦法(空字符串變?yōu)榭占?

    解決一個(gè)JSON反序列化問題的辦法(空字符串變?yōu)榭占?

    在平時(shí)的業(yè)務(wù)開發(fā)中,經(jīng)常會(huì)有拿到一串序列化后的字符串要來反序列化,下面這篇文章主要給大家介紹了如何解決一個(gè)JSON反序列化問題的相關(guān)資料,空字符串變?yōu)榭占?需要的朋友可以參考下
    2024-03-03
  • springBoot項(xiàng)目打包idea的多種方法

    springBoot項(xiàng)目打包idea的多種方法

    這篇文章主要介紹了springBoot項(xiàng)目打包idea的多種方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Java中逆序遍歷List集合的實(shí)現(xiàn)

    Java中逆序遍歷List集合的實(shí)現(xiàn)

    本文主要介紹了Java中逆序遍歷List集合的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • 為什么Java中都不用a.equals(b)判斷對(duì)象相等

    為什么Java中都不用a.equals(b)判斷對(duì)象相等

    在面試中經(jīng)常會(huì)被問,a.equals(b)和“==”的區(qū)別,那么a.equals(b)能不能判斷對(duì)象相等,本文就來詳細(xì)的介紹一下
    2021-06-06
  • 基于mybatis?plus實(shí)現(xiàn)數(shù)據(jù)源動(dòng)態(tài)添加、刪除、切換,自定義數(shù)據(jù)源的示例代碼

    基于mybatis?plus實(shí)現(xiàn)數(shù)據(jù)源動(dòng)態(tài)添加、刪除、切換,自定義數(shù)據(jù)源的示例代碼

    這篇文章主要介紹了基于mybatis?plus實(shí)現(xiàn)數(shù)據(jù)源動(dòng)態(tài)添加、刪除、切換,自定義數(shù)據(jù)源,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • java 枚舉類定義靜態(tài)valueOf(java.lang.String)方法的問題及解決

    java 枚舉類定義靜態(tài)valueOf(java.lang.String)方法的問題及解決

    這篇文章主要介紹了java 枚舉類定義靜態(tài)valueOf(java.lang.String)方法的問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • SpringMVC Json自定義序列化和反序列化的操作方法

    SpringMVC Json自定義序列化和反序列化的操作方法

    這篇文章主要介紹了SpringMVC Json自定義序列化和反序列化的操作方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • java8從list集合中取出某一屬性的值的集合案例

    java8從list集合中取出某一屬性的值的集合案例

    這篇文章主要介紹了java8從list集合中取出某一屬性的值的集合案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08

最新評(píng)論

呼伦贝尔市| 屏东市| 寿宁县| 兰西县| 武隆县| 阿尔山市| 四川省| 德昌县| 台湾省| 赤水市| 定边县| 高要市| 井冈山市| 康保县| 合水县| 南江县| 渭南市| 辉南县| 宜都市| 体育| 宜宾县| 仪征市| 修文县| 昭平县| 宁乡县| 玉林市| 双柏县| 左贡县| 咸丰县| 开封市| 阳曲县| 沙湾县| 区。| 泽州县| 五莲县| 平舆县| 兰考县| 达日县| 广南县| 江西省| 泸溪县|