2017年7月29日 星期六

(Java)(資料結構)二元樹(搜尋,走訪)

  1. /* 
  2.  *  
  3.  * 二元樹(搜尋,走訪) 
  4.  */  
  5. public class Binary_Tree_Search {  
  6.  Node rootNode ;  
  7.  int count  ;  
  8.  public static void main(String[] args) {  
  9.   int[] tree  = {5,7,15,47,6,14,56,51,25};  
  10.   Binary_Tree_Search n = new Binary_Tree_Search(tree);  
  11.   System.out.println("中序走訪 :");  
  12.      n.inOrder(n.rootNode);//從根開始  
  13.      System.out.println("\n前序走訪 :");  
  14.      n.Preorder(n.rootNode);  
  15.      System.out.println("\n後序走訪 :");  
  16.      n.Postorder(n.rootNode);  
  17.      System.out.println("\n找尋51:");  
  18.          n.findNode(51, n.rootNode);  
  19.     
  20.        
  21.  }  
  22.  public void inOrder(Node node){//中序  左中右  
  23.   if(node != null){  
  24.   inOrder(node.Left_Node);  
  25.   System.out.print("( "+node.data+" )  ");  
  26.   inOrder(node.Right_Node);  
  27.   }  
  28.  }  
  29.  public void Preorder(Node node){  
  30.   if(node != null){  
  31.   System.out.print("( "+node.data+" )  ");  
  32.      Preorder(node.Left_Node);  
  33.   Preorder(node.Right_Node);  
  34.   }  
  35.  }  
  36.  public void Postorder (Node node){  
  37.   if(node != null){  
  38.   Postorder (node.Left_Node);  
  39.   Postorder (node.Right_Node);  
  40.   System.out.print("( "+node.data+" )  ");  
  41.   }  
  42.  }  
  43.    
  44.  Binary_Tree_Search(int[] tree){  
  45.   
  46.    for(int value : tree)  
  47.   add_Tree_Node(value);  
  48.  }  
  49.  public boolean findNode(int value , Node node){  
  50.   if(node == null){  
  51.    System.out.println("\n"+value+ " : Not find");  
  52.    return false;  
  53.   }else{  
  54.   if(value == node.data){  
  55.    System.out.println("\n"+value+ " 共搜尋 : "+count +"次");  
  56.    return true ;  
  57.   }else if(value <  node.data){ //假如< 就繼續跟左Node比較  
  58.    count++;  
  59.    return  findNode(value , node.Left_Node) ;    
  60.   }else if(value >  node.data){ //假如< 就繼續跟左Node比較  
  61.    count++;  
  62.    return  findNode(value , node.Right_Node) ;    
  63.   }  
  64.   }  
  65.   return false;  
  66.  }  
  67.  private void add_Tree_Node(int value) {  
  68.     
  69.   Node currNode = rootNode ;  
  70.   if(rootNode == null){  
  71.    rootNode = new Node(value);  
  72.    return ;  
  73.   }  
  74.   while(true){  
  75.    if( value  <  currNode.data ){  
  76.     if( currNode.Left_Node == null){  
  77.      currNode.Left_Node =new Node(value) ;  
  78.         return ;  
  79.     }else  
  80.      currNode = currNode.Left_Node ;  
  81.    }else if(value  >  currNode.data ){  
  82.     if( currNode.Right_Node == null){  
  83.      currNode.Right_Node =new Node(value) ;  
  84.      return ;  
  85.     }else  
  86.      currNode = currNode.Right_Node ;  
  87.    }  
  88.   }  
  89.  }  
  90. }  
  91. class Node{  
  92.  Node Left_Node ;   
  93.  Node Right_Node ;   
  94.  int data;  
  95.  Node(int d){  
  96.   data = d ;  
  97.  }  
  98. }  

沒有留言:

張貼留言

注意:只有此網誌的成員可以留言。