/**
* @title: 二叉樹遍歷,求深度
* @author : Jay Chang
* @version : ver 1.0
* @date : 2009.7.25
*/
import java.util.Scanner;java
/*二叉樹的結點的定義*/
class BiTreeNode
{
private String nodeName;
private int value;
/*沒有解決好lChild,rChild兩個屬性的封裝,存在些問題,不知道爲何,有待改進*/
public BiTreeNode lChild;
public BiTreeNode rChild;
public BiTreeNode(){}
/*建立結點對象的構造器*/
public BiTreeNode(String nodeName,int value)
{
this.nodeName=nodeName;
this.value=value;
this.lChild=null;
this.rChild=null;
}
/*setName,getName,setValue,getValue,是對結點兩個屬性的封裝 */
public void setName(String nodeName)
{
this.nodeName=nodeName;
}node
public String getName()
{
return nodeName;
}this
public void setValue(int value)
{
this.value=value;
}.net
public int getValue()
{
return this.value;
}對象
}遞歸
/*二叉樹類定義*/
class BiTree
{
private BiTreeNode root;
public BiTree(){}
public BiTreeNode getRoot()
{
return this.root;
}
public void create()
{
this.root=createBiTree(this.root);
}
/*遞歸建立二叉樹*/
private BiTreeNode createBiTree(BiTreeNode node)
{
String name;int value;
Scanner sc=new Scanner(System.in);
System.out.println("輸入結點名稱及值:");
name=sc.next();value=sc.nextInt();
if(name!="#"&&value!=-1){
node =new BiTreeNode(name,value);
node.lChild=createBiTree(node.lChild); //node.lChild和node.rChild本應使用封裝,可是不能用?
node.rChild=createBiTree(node.rChild);
return node;
}else{
return null;
}
}
/*求二叉樹的高度*/
public int getDepth(BiTreeNode node)
{
int lDepth,rDepth;
if(node==null){
return 0;
}
lDepth=getDepth(node.lChild);
rDepth=getDepth(node.rChild);
return (lDepth>rDepth?lDepth:rDepth)+1;
}get
/*先序遍歷二叉樹*/
public void fTraverse(BiTreeNode node)
{
if(node!=null){
System.out.println("Node Name:"+node.getName()+" Node Value:"+node.getValue());
fTraverse(node.lChild);
fTraverse(node.rChild);
}else{
return;
}
}
/*中序遍歷二叉樹*/
public void mTraverse(BiTreeNode node)
{
if(node!=null){
mTraverse(node.lChild);
System.out.println("Node Name:"+node.getName()+" Node Value:"+node.getValue());
mTraverse(node.rChild);
}else{
return;
}
}
/*後序遍歷二叉樹*/
public void lTraverse(BiTreeNode node)
{
if(node!=null){
lTraverse(node.lChild);
lTraverse(node.rChild);
System.out.println("Node Name:"+node.getName()+" Node Value:"+node.getValue());
}else{
return;
}
}it
}io
public class TestBiTree
{
public static void main(String[] args)
{
BiTree biTree=new BiTree();
biTree.create();
System.out.println("先序遍歷:");
biTree.fTraverse(biTree.getRoot());
System.out.println("中序遍歷:");
biTree.mTraverse(biTree.getRoot());
System.out.println("後序遍歷:");
biTree.lTraverse(biTree.getRoot());
System.out.println("二叉樹的高度:");
System.out.println(biTree.getDepth(biTree.getRoot()));
}class
}