- /*
- *
- * 二元樹(搜尋,走訪)
- */
- public class Binary_Tree_Search {
- Node rootNode ;
- int count ;
- public static void main(String[] args) {
- int[] tree = {5,7,15,47,6,14,56,51,25};
- Binary_Tree_Search n = new Binary_Tree_Search(tree);
- System.out.println("中序走訪 :");
- n.inOrder(n.rootNode);//從根開始
- System.out.println("\n前序走訪 :");
- n.Preorder(n.rootNode);
- System.out.println("\n後序走訪 :");
- n.Postorder(n.rootNode);
- System.out.println("\n找尋51:");
- n.findNode(51, n.rootNode);
- }
- public void inOrder(Node node){//中序 左中右
- if(node != null){
- inOrder(node.Left_Node);
- System.out.print("( "+node.data+" ) ");
- inOrder(node.Right_Node);
- }
- }
- public void Preorder(Node node){
- if(node != null){
- System.out.print("( "+node.data+" ) ");
- Preorder(node.Left_Node);
- Preorder(node.Right_Node);
- }
- }
- public void Postorder (Node node){
- if(node != null){
- Postorder (node.Left_Node);
- Postorder (node.Right_Node);
- System.out.print("( "+node.data+" ) ");
- }
- }
- Binary_Tree_Search(int[] tree){
- for(int value : tree)
- add_Tree_Node(value);
- }
- public boolean findNode(int value , Node node){
- if(node == null){
- System.out.println("\n"+value+ " : Not find");
- return false;
- }else{
- if(value == node.data){
- System.out.println("\n"+value+ " 共搜尋 : "+count +"次");
- return true ;
- }else if(value < node.data){ //假如< 就繼續跟左Node比較
- count++;
- return findNode(value , node.Left_Node) ;
- }else if(value > node.data){ //假如< 就繼續跟左Node比較
- count++;
- return findNode(value , node.Right_Node) ;
- }
- }
- return false;
- }
- private void add_Tree_Node(int value) {
- Node currNode = rootNode ;
- if(rootNode == null){
- rootNode = new Node(value);
- return ;
- }
- while(true){
- if( value < currNode.data ){
- if( currNode.Left_Node == null){
- currNode.Left_Node =new Node(value) ;
- return ;
- }else
- currNode = currNode.Left_Node ;
- }else if(value > currNode.data ){
- if( currNode.Right_Node == null){
- currNode.Right_Node =new Node(value) ;
- return ;
- }else
- currNode = currNode.Right_Node ;
- }
- }
- }
- }
- class Node{
- Node Left_Node ;
- Node Right_Node ;
- int data;
- Node(int d){
- data = d ;
- }
- }
2017年7月29日 星期六
(Java)(資料結構)二元樹(搜尋,走訪)
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言
注意:只有此網誌的成員可以留言。