分享

Java 创建二叉树并遍历

 橙zc 2014-09-15
  1. public class BinaryTree {  
  2.   
  3.     private Node root;  
  4.       
  5.     /** 
  6.      *  
  7.      * 内部节点类 
  8.      * @author yhh 
  9.      */  
  10.     private class Node{  
  11.         private Node left;  
  12.         private Node right;  
  13.         private int data;  
  14.         public Node(int data){  
  15.             this.left = null;  
  16.             this.right = null;  
  17.             this.data = data;  
  18.         }  
  19.     }  
  20.       
  21.     public BinaryTree(){  
  22.         root = null;  
  23.     }  
  24.       
  25.     /** 
  26.      * 递归创建二叉树 
  27.      * @param node 
  28.      * @param data 
  29.      */  
  30.     public void buildTree(Node node,int data){  
  31.         if(root == null){  
  32.             root = new Node(data);  
  33.         }else{  
  34.             if(data < node.data){  
  35.                 if(node.left == null){  
  36.                     node.left = new Node(data);  
  37.                 }else{  
  38.                     buildTree(node.left,data);  
  39.                 }  
  40.             }else{  
  41.                 if(node.right == null){  
  42.                     node.right = new Node(data);  
  43.                 }else{  
  44.                     buildTree(node.right,data);  
  45.                 }  
  46.             }  
  47.         }  
  48.     }  
  49.       
  50.     /** 
  51.      * 前序遍历 
  52.      * @param node 
  53.      */  
  54.     public void preOrder(Node node){  
  55.         if(node != null){  
  56.             System.out.println(node.data);  
  57.             preOrder(node.left);  
  58.             preOrder(node.right);  
  59.         }  
  60.     }  
  61.       
  62.     /** 
  63.      * 中序遍历 
  64.      * @param node 
  65.      */  
  66.     public void inOrder(Node node){  
  67.         if(node != null){  
  68.             inOrder(node.left);  
  69.             System.out.println(node.data);  
  70.             inOrder(node.right);  
  71.         }  
  72.     }  
  73.       
  74.     /** 
  75.      * 后序遍历 
  76.      * @param node 
  77.      */  
  78.     public void postOrder(Node node){  
  79.         if(node != null){  
  80.             postOrder(node.left);  
  81.             postOrder(node.right);  
  82.             System.out.println(node.data);  
  83.         }  
  84.     }  
  85.       
  86.     public static void main(String[] args) {  
  87.         int[] a = {2,4,12,45,21,6,111};  
  88.         BinaryTree bTree = new BinaryTree();  
  89.         for (int i = 0; i < a.length; i++) {  
  90.             bTree.buildTree(bTree.root, a[i]);  
  91.         }  
  92.         bTree.preOrder(bTree.root);  
  93.         bTree.inOrder(bTree.root);  
  94.         bTree.postOrder(bTree.root);  
  95.     }  
  96.   
  97. }  





  1. public class BinaryTree {  
  2.   
  3.     private Node root;  
  4.       
  5.     /** 
  6.      *  
  7.      * 内部节点类 
  8.      * @author yhh 
  9.      */  
  10.     private class Node{  
  11.         private Node left;  
  12.         private Node right;  
  13.         private int data;  
  14.         public Node(int data){  
  15.             this.left = null;  
  16.             this.right = null;  
  17.             this.data = data;  
  18.         }  
  19.     }  
  20.       
  21.     public BinaryTree(){  
  22.         root = null;  
  23.     }  
  24.       
  25.     /** 
  26.      * 递归创建二叉树 
  27.      * @param node 
  28.      * @param data 
  29.      */  
  30.     public void buildTree(Node node,int data){  
  31.         if(root == null){  
  32.             root = new Node(data);  
  33.         }else{  
  34.             if(data < node.data){  
  35.                 if(node.left == null){  
  36.                     node.left = new Node(data);  
  37.                 }else{  
  38.                     buildTree(node.left,data);  
  39.                 }  
  40.             }else{  
  41.                 if(node.right == null){  
  42.                     node.right = new Node(data);  
  43.                 }else{  
  44.                     buildTree(node.right,data);  
  45.                 }  
  46.             }  
  47.         }  
  48.     }  
  49.       
  50.     /** 
  51.      * 前序遍历 
  52.      * @param node 
  53.      */  
  54.     public void preOrder(Node node){  
  55.         if(node != null){  
  56.             System.out.println(node.data);  
  57.             preOrder(node.left);  
  58.             preOrder(node.right);  
  59.         }  
  60.     }  
  61.       
  62.     /** 
  63.      * 中序遍历 
  64.      * @param node 
  65.      */  
  66.     public void inOrder(Node node){  
  67.         if(node != null){  
  68.             inOrder(node.left);  
  69.             System.out.println(node.data);  
  70.             inOrder(node.right);  
  71.         }  
  72.     }  
  73.       
  74.     /** 
  75.      * 后序遍历 
  76.      * @param node 
  77.      */  
  78.     public void postOrder(Node node){  
  79.         if(node != null){  
  80.             postOrder(node.left);  
  81.             postOrder(node.right);  
  82.             System.out.println(node.data);  
  83.         }  
  84.     }  
  85.       
  86.     public static void main(String[] args) {  
  87.         int[] a = {2,4,12,45,21,6,111};  
  88.         BinaryTree bTree = new BinaryTree();  
  89.         for (int i = 0; i < a.length; i++) {  
  90.             bTree.buildTree(bTree.root, a[i]);  
  91.         }  
  92.         bTree.preOrder(bTree.root);  
  93.         bTree.inOrder(bTree.root);  
  94.         bTree.postOrder(bTree.root);  
  95.     }  
  96.   
  97. }  





    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多