這個(gè)可以使用遞歸來實(shí)現(xiàn),具體代碼如下:
創(chuàng)新互聯(lián)公司專業(yè)成都網(wǎng)站建設(shè)、成都做網(wǎng)站,集網(wǎng)站策劃、網(wǎng)站設(shè)計(jì)、網(wǎng)站制作于一體,網(wǎng)站seo、網(wǎng)站優(yōu)化、網(wǎng)站營銷、軟文發(fā)稿等專業(yè)人才根據(jù)搜索規(guī)律編程設(shè)計(jì),讓網(wǎng)站在運(yùn)行后,在搜索中有好的表現(xiàn),專業(yè)設(shè)計(jì)制作為您帶來效益的網(wǎng)站!讓網(wǎng)站建設(shè)為您創(chuàng)造效益。
import?java.io.File;
public?class?Demo?{
public?static?void?main(String[]?args)?{
File?file?=?new?File("C:\\");//?指定文件目錄
method(file);
}
public?static?void?method(File?file)?{
File[]?fs?=?file.listFiles();//?得到File數(shù)組
if(fs!=null)?{//?判斷fs是否為null
for(File?f?:?fs)?{
if(f.isFile())?{//?如果是文件直接輸出
System.out.println(f.getName());
}?else?{
method(f);//?否則遞歸調(diào)用
}
}
}
}
}
前pre(root)
{ if(root==null)return null;
visit(root);pre(root.left);pre(root.right);
}
中in(root)
{ if(root==null)return null;
in(root.left);visit(root);in(root.right);
}
后post(root)
{ if(root==null)return null;
post(root.left);post(root.right);visit(root);
}
這個(gè)不是很難理解哈,就是使用遞歸來遍歷樹,LZ請(qǐng)看:
首先,這個(gè)preOrder這個(gè)方法是用來遍歷樹的,貌似說了個(gè)廢話,它需要一個(gè)
BinaryNodeE p的參數(shù),這個(gè)參數(shù)就是樹上的一個(gè)節(jié)點(diǎn)。
首先,假如當(dāng)前p是A,那么判斷p是否為null,也就是是否有這個(gè)節(jié)點(diǎn),如果有,那么打印p.data,應(yīng)該是p的信息。
然后再次調(diào)用這個(gè)preOrder遍歷樹的方法preOrder(p.left);preOrder(p.right),但這此傳入的節(jié)點(diǎn)已經(jīng)不是A了,而是p.left和p.right,也就是B和C,然后依然跟上面一樣,先判斷是否有該節(jié)點(diǎn),如果有就打印節(jié)點(diǎn)信息,然后再次調(diào)用該方法傳入自己的左右孩子節(jié)點(diǎn),一次遞歸循環(huán),自己的左右孩子為null的時(shí)候,當(dāng)然不會(huì)走if語句里面的內(nèi)容,遞歸也就自然結(jié)束了
希望可以幫到LZ
//類Node定義二叉樹結(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu);
//一個(gè)結(jié)點(diǎn)應(yīng)包含結(jié)點(diǎn)值,左子結(jié)點(diǎn)的引用和右子結(jié)點(diǎn)的引用
class Node{
public Node left; //左子結(jié)點(diǎn)
public Node right; //右子結(jié)點(diǎn)
public int value; //結(jié)點(diǎn)值
public Node(int val){
value = val;
}
}
public class Traversal
{
//read()方法將按照前序遍歷的方式遍歷輸出二叉樹的結(jié)點(diǎn)值
//此處采用遞歸算法會(huì)比較簡(jiǎn)單,也容易理解,當(dāng)然也可以用
//循環(huán)的方法遍歷,但會(huì)比較復(fù)雜,也比較難懂。二叉樹遍歷
//用遞歸算法最為簡(jiǎn)單,因?yàn)槊總€(gè)結(jié)點(diǎn)的遍歷方式都是,根,
//左,右,遞歸的調(diào)用可以讓每個(gè)結(jié)點(diǎn)以這種方式遍歷
public static void read(Node node){
if(node != null){
System.out.println(node.value);//輸出當(dāng)前結(jié)點(diǎn)的值
if(node.left != null)
read(node.left); //遞歸調(diào)用 先讀左結(jié)點(diǎn)
if(node.right != null)
read(node.right); //遞歸調(diào)用 后讀右結(jié)點(diǎn)
}
}
public static void main(String[] args){
//初始化5個(gè)結(jié)點(diǎn),分別初始值為1,2,3,4,5
Node n1 = new Node(1);
Node n2 = new Node(2);
Node n3 = new Node(3);
Node n4 = new Node(4);
Node n5 = new Node(5);
//構(gòu)建二叉樹,以n1為根結(jié)點(diǎn)
n1.left = n2;
n1.right = n5;
n2.left = n3;
n2.right = n4;
read(n1);
}
}
注釋和代碼都是我自己寫的,如果樓主覺得有的注釋多余可以自己刪除一些!代碼我都編譯通過,并且運(yùn)行結(jié)果如你提的要求一樣!你只要把代碼復(fù)制編譯就可以了,注意要以文件名Traversal.java來保存,否則編譯不通過,因?yàn)閙ain函數(shù)所在的類是public類型的!
可以通過計(jì)算出二叉樹所在節(jié)點(diǎn)的元素順序,然后再數(shù)組中通過樹節(jié)點(diǎn)的順序值也就是下標(biāo),拿到元素。