二叉樹遍歷,求深度

/**
* @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

}

相關文章
相關標籤/搜索