真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

樹的java實(shí)現(xiàn)代碼 Java實(shí)現(xiàn)樹

java如何實(shí)現(xiàn) 樹 的模型

可以參考 javax.swing.tree 的思想 給你一點(diǎn)點(diǎn)的提示...

成都創(chuàng)新互聯(lián)公司服務(wù)項(xiàng)目包括青云譜網(wǎng)站建設(shè)、青云譜網(wǎng)站制作、青云譜網(wǎng)頁制作以及青云譜網(wǎng)絡(luò)營(yíng)銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,青云譜網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到青云譜省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

import java.util.*;

/** 樹對(duì)象 */

public interface Tree implements IterableTreeNode{

/** 得到樹根 */

TreeNode getRoot();

/** 返回迭代器(比如先根遍歷整顆樹) */

IteratorTreeNode iterator();

}

//====

/** 樹節(jié)點(diǎn)對(duì)象 */

public interface TreeNode {

/** 返回父節(jié)點(diǎn) */

TreeNode getParent();

/** 返回孩子節(jié)點(diǎn)的迭代器 */

IteratorTreeNode children();

boolean isRoot();

boolean isLeaf();

//...methods

}

用java怎么構(gòu)造一個(gè)二叉樹呢?

java構(gòu)造二叉樹,可以通過鏈表來構(gòu)造,如下代碼:

public?class?BinTree?{

public?final?static?int?MAX=40;

BinTree?[]elements?=?new?BinTree[MAX];//層次遍歷時(shí)保存各個(gè)節(jié)點(diǎn)

int?front;//層次遍歷時(shí)隊(duì)首

int?rear;//層次遍歷時(shí)隊(duì)尾

private?Object?data;?//數(shù)據(jù)元數(shù)

private?BinTree?left,right;?//指向左,右孩子結(jié)點(diǎn)的鏈

public?BinTree()

{

}

public?BinTree(Object?data)

{?//構(gòu)造有值結(jié)點(diǎn)

this.data?=?data;

left?=?right?=?null;

}

public?BinTree(Object?data,BinTree?left,BinTree?right)

{?//構(gòu)造有值結(jié)點(diǎn)

this.data?=?data;

this.left?=?left;

this.right?=?right;

}

public?String?toString()

{

return?data.toString();

}

//前序遍歷二叉樹

public?static?void?preOrder(BinTree?parent){?

if(parent?==?null)

return;

System.out.print(parent.data+"?");

preOrder(parent.left);

preOrder(parent.right);

}

//中序遍歷二叉樹

public?void?inOrder(BinTree?parent){

if(parent?==?null)

return;

inOrder(parent.left);

System.out.print(parent.data+"?");

inOrder(parent.right);

}

//后序遍歷二叉樹

public?void?postOrder(BinTree?parent){

if(parent?==?null)

return;

postOrder(parent.left);

postOrder(parent.right);

System.out.print(parent.data+"?");

}

//?層次遍歷二叉樹?

public?void?LayerOrder(BinTree?parent)

{?

elements[0]=parent;

front=0;rear=1;

while(frontrear)

{

try

{

if(elements[front].data!=null)

{

System.out.print(elements[front].data?+?"?");

if(elements[front].left!=null)

elements[rear++]=elements[front].left;

if(elements[front].right!=null)

elements[rear++]=elements[front].right;

front++;

}

}catch(Exception?e){break;}

}

}

//返回樹的葉節(jié)點(diǎn)個(gè)數(shù)

public?int?leaves()

{

if(this?==?null)

return?0;

if(left?==?nullright?==?null)

return?1;

return?(left?==?null???0?:?left.leaves())+(right?==?null???0?:?right.leaves());

}

//結(jié)果返回樹的高度

public?int?height()

{

int?heightOfTree;

if(this?==?null)

return?-1;

int?leftHeight?=?(left?==?null???0?:?left.height());

int?rightHeight?=?(right?==?null???0?:?right.height());

heightOfTree?=?leftHeightrightHeight?rightHeight:leftHeight;

return?1?+?heightOfTree;

}

//如果對(duì)象不在樹中,結(jié)果返回-1;否則結(jié)果返回該對(duì)象在樹中所處的層次,規(guī)定根節(jié)點(diǎn)為第一層

public?int?level(Object?object)

{

int?levelInTree;

if(this?==?null)

return?-1;

if(object?==?data)

return?1;//規(guī)定根節(jié)點(diǎn)為第一層

int?leftLevel?=?(left?==?null?-1:left.level(object));

int?rightLevel?=?(right?==?null?-1:right.level(object));

if(leftLevel0rightLevel0)

return?-1;

levelInTree?=?leftLevelrightLevel?rightLevel:leftLevel;

return?1+levelInTree;

}

//將樹中的每個(gè)節(jié)點(diǎn)的孩子對(duì)換位置

public?void?reflect()

{

if(this?==?null)

return;

if(left?!=?null)

left.reflect();

if(right?!=?null)

right.reflect();

BinTree?temp?=?left;

left?=?right;

right?=?temp;

}

//?將樹中的所有節(jié)點(diǎn)移走,并輸出移走的節(jié)點(diǎn)

public?void?defoliate()

{

if(this?==?null)

return;

//若本節(jié)點(diǎn)是葉節(jié)點(diǎn),則將其移走

if(left==nullright?==?null)

{

System.out.print(this?+?"?");

data?=?null;

return;

}

//移走左子樹若其存在

if(left!=null){

left.defoliate();

left?=?null;

}

//移走本節(jié)點(diǎn),放在中間表示中跟移走...

String?innerNode?+=?this?+?"?";

data?=?null;

//移走右子樹若其存在

if(right!=null){

right.defoliate();

right?=?null;

}

}

/**

*?@param?args

*/

public?static?void?main(String[]?args)?{

//?TODO?Auto-generated?method?stub

BinTree?e?=?new?BinTree("E");

BinTree?g?=?new?BinTree("G");

BinTree?h?=?new?BinTree("H");

BinTree?i?=?new?BinTree("I");

BinTree?d?=?new?BinTree("D",null,g);

BinTree?f?=?new?BinTree("F",h,i);

BinTree?b?=?new?BinTree("B",d,e);

BinTree?c?=?new?BinTree("C",f,null);

BinTree?tree?=?new?BinTree("A",b,c);

System.out.println("前序遍歷二叉樹結(jié)果:?");

tree.preOrder(tree);

System.out.println();

System.out.println("中序遍歷二叉樹結(jié)果:?");

tree.inOrder(tree);

System.out.println();

System.out.println("后序遍歷二叉樹結(jié)果:?");

tree.postOrder(tree);

System.out.println();

System.out.println("層次遍歷二叉樹結(jié)果:?");

tree.LayerOrder(tree);

System.out.println();

System.out.println("F所在的層次:?"+tree.level("F"));

System.out.println("這棵二叉樹的高度:?"+tree.height());

System.out.println("--------------------------------------");

tree.reflect();

System.out.println("交換每個(gè)節(jié)點(diǎn)的孩子節(jié)點(diǎn)后......");

System.out.println("前序遍歷二叉樹結(jié)果:?");

tree.preOrder(tree);

System.out.println();

System.out.println("中序遍歷二叉樹結(jié)果:?");

tree.inOrder(tree);

System.out.println();

System.out.println("后序遍歷二叉樹結(jié)果:?");

tree.postOrder(tree);

System.out.println();

System.out.println("層次遍歷二叉樹結(jié)果:?");

tree.LayerOrder(tree);

System.out.println();

System.out.println("F所在的層次:?"+tree.level("F"));

System.out.println("這棵二叉樹的高度:?"+tree.height());

}

說明生活中遇到的二叉樹,用java實(shí)現(xiàn)二叉樹. (求源碼,要求簡(jiǎn)練、易懂。非常滿意會(huì)額外加分)

import java.util.ArrayList;

// 樹的一個(gè)節(jié)點(diǎn)

class TreeNode {

Object _value = null; // 他的值

TreeNode _parent = null; // 他的父節(jié)點(diǎn),根節(jié)點(diǎn)沒有PARENT

ArrayList _childList = new ArrayList(); // 他的孩子節(jié)點(diǎn)

public TreeNode( Object value, TreeNode parent ){

this._parent = parent;

this._value = value;

}

public TreeNode getParent(){

return _parent;

}

public String toString() {

return _value.toString();

}

}

public class Tree {

// 給出寬度優(yōu)先遍歷的值數(shù)組,構(gòu)建出一棵多叉樹

// null 值表示一個(gè)層次的結(jié)束

// "|" 表示一個(gè)層次中一個(gè)父親節(jié)點(diǎn)的孩子輸入結(jié)束

// 如:給定下面的值數(shù)組:

// { "root", null, "left", "right", null }

// 則構(gòu)建出一個(gè)根節(jié)點(diǎn),帶有兩個(gè)孩子("left","right")的樹

public Tree( Object[] values ){

// 創(chuàng)建根

_root = new TreeNode( values[0], null );

// 創(chuàng)建下面的子節(jié)點(diǎn)

TreeNode currentParent = _root; // 用于待創(chuàng)建節(jié)點(diǎn)的父親

//TreeNode nextParent = null;

int currentChildIndex = 0; // 表示 currentParent 是他的父親的第幾個(gè)兒子

//TreeNode lastNode = null; // 最后一個(gè)創(chuàng)建出來的TreeNode,用于找到他的父親

for ( int i = 2; i values.length; i++ ){

// 如果null ,表示下一個(gè)節(jié)點(diǎn)的父親是當(dāng)前節(jié)點(diǎn)的父親的第一個(gè)孩子節(jié)點(diǎn)

if ( values[i] == null ){

currentParent = (TreeNode)currentParent._childList.get(0);

currentChildIndex = 0;

continue;

}

// 表示一個(gè)父節(jié)點(diǎn)的所有孩子輸入完畢

if ( values[i].equals("|") ){

if ( currentChildIndex+1 currentParent._childList.size() ){

currentChildIndex++;

currentParent = (TreeNode)currentParent._parent._childList.get(currentChildIndex);

}

continue;

}

TreeNode child = createChildNode( currentParent, values[i] );

}

}

TreeNode _root = null;

public TreeNode getRoot(){

return _root;

}

/**

// 按寬度優(yōu)先遍歷,打印出parent子樹所有的節(jié)點(diǎn)

private void printSteps( TreeNode parent, int currentDepth ){

for ( int i = 0; i parent._childList.size(); i++ ){

TreeNode child = (TreeNode)parent._childList.get(i);

System.out.println(currentDepth+":"+child);

}

if ( parent._childList.size() != 0 ) System.out.println(""+null);// 為了避免葉子節(jié)點(diǎn)也會(huì)打印null

//打印 parent 同層的節(jié)點(diǎn)的孩子

if ( parent._parent != null ){ // 不是root

int i = 1;

while ( i parent._parent._childList.size() ){// parent 的父親還有孩子

TreeNode current = (TreeNode)parent._parent._childList.get(i);

printSteps( current, currentDepth );

i++;

}

}

// 遞歸調(diào)用,打印所有節(jié)點(diǎn)

for ( int i = 0; i parent._childList.size(); i++ ){

TreeNode child = (TreeNode)parent._childList.get(i);

printSteps( child, currentDepth+1 );

}

}

// 按寬度優(yōu)先遍歷,打印出parent子樹所有的節(jié)點(diǎn)

public void printSteps(){

System.out.println(""+_root);

System.out.println(""+null);

printSteps(_root, 1 );

}**/

// 將給定的值做為 parent 的孩子,構(gòu)建節(jié)點(diǎn)

private TreeNode createChildNode( TreeNode parent, Object value ){

TreeNode child = new TreeNode( value , parent );

parent._childList.add( child );

return child;

}

public static void main(String[] args) {

Tree tree = new Tree( new Object[]{ "root", null,

"left", "right", null,

"l1","l2","l3", "|", "r1","r2",null } );

//tree.printSteps();

System.out.println(""+ ( (TreeNode)tree.getRoot()._childList.get(0) )._childList.get(0) );

System.out.println(""+ ( (TreeNode)tree.getRoot()._childList.get(0) )._childList.get(1) );

System.out.println(""+ ( (TreeNode)tree.getRoot()._childList.get(0) )._childList.get(2) );

System.out.println(""+ ( (TreeNode)tree.getRoot()._childList.get(1) )._childList.get(0) );

System.out.println(""+ ( (TreeNode)tree.getRoot()._childList.get(1) )._childList.get(1) );

}

}

看一下吧!這是在網(wǎng)上找的一個(gè)例子!看對(duì)你有沒有幫助!

用Java實(shí)現(xiàn)一個(gè)樹形結(jié)構(gòu),并對(duì)其進(jìn)行遍歷

import?java.util.Iterator;

import?java.util.Random;

import?java.util.TreeSet;

public?class?Demo{

public?static?void?main(String[]?args)?throws?Exception?{

TreeSetInteger?ts?=?new?TreeSetInteger();

for(int?i?=?0;?i??10;?i++){

ts.add(new?Random().nextInt(999));

}

for(IteratorInteger?it?=?ts.iterator();?it.hasNext();){

System.out.println(it.next());

}

}

}

//上面是利用TreeSet進(jìn)行簡(jiǎn)單的二叉樹實(shí)現(xiàn),另有遍歷,當(dāng)然遍歷是自然順序。

//如有需要請(qǐng)自行修改吧。


文章名稱:樹的java實(shí)現(xiàn)代碼 Java實(shí)現(xiàn)樹
當(dāng)前鏈接:http://weahome.cn/article/doophcg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部