二叉树

二叉树是个经常使用的数据结构:

 

[c-sharp]  view plain copy
  1. /** 
  2.  * 二叉树的一个简单实现,从根开始,大于或等于节点的值放入右子树,否则放入左子树 
  3.  *  
  4.  *  
  5.  * @author ma.rl 
  6.  *  
  7.  */  
  8. public class BinTree {  
  9.   
  10.     private Node root;  
  11.   
  12.     public BinTree() {  
  13.   
  14.     }  
  15.   
  16.     /** 
  17.      * @return the root 
  18.      */  
  19.     public Node getRoot() {  
  20.         return root;  
  21.     }  
  22.   
  23.     /** 
  24.      * @param root 
  25.      *            the root to set 
  26.      */  
  27.     public void setRoot(Node root) {  
  28.         this.root = root;  
  29.     }  
  30.   
  31.     public void buildTree(int[] a) {  
  32.         // 1,2,3,4,5,6  
  33.         // 3,1,2,6,5,4  
  34.         for (int i : a) {  
  35.             insert(root, i);  
  36.         }  
  37.   
  38.     }  
  39.   
  40.     /** 
  41.      * 插入节点 
  42.      *  
  43.      * @param node 
  44.      * @param i 
  45.      */  
  46.     public void insert(Node node, int i) {  
  47.         if (root == null) {  
  48.             root = new Node();  
  49.             root.setValue(i);  
  50.         } else {  
  51.             // 插入  
  52.             insertNode(root, i);  
  53.         }  
  54.     }  
  55.   
  56.     /** 
  57.      * 递归查找插入 
  58.      * @param node 
  59.      * @param i 
  60.      */  
  61.     public void insertNode(Node node, int i) {  
  62.         if (node.getValue() > i) {  
  63.             // 查找左子树  
  64.             if (node.getLeft() == null) {  
  65.                 Node newNode = new Node();  
  66.                 newNode.setValue(i);  
  67.                 node.setLeft(newNode);  
  68.             } else {  
  69.                 insertNode(node.getLeft(), i);  
  70.             }  
  71.         } else {  
  72.             // 查找右子树  
  73.             if (node.getRight() == null) {  
  74.                 Node newNode = new Node();  
  75.                 newNode.setValue(i);  
  76.                 node.setRight(newNode);  
  77.             } else {  
  78.                 insertNode(node.getRight(), i);  
  79.             }  
  80.         }  
  81.     }  
  82.   
  83.     /** 
  84.      * 先序遍历 
  85.      */  
  86.     public void preTravelTree(Node node) {  
  87.         if (node != null) {  
  88.             System.out.println(node.getValue());  
  89.             preTravelTree(node.getLeft());  
  90.             preTravelTree(node.getRight());  
  91.         }  
  92.     }  
  93.       
  94.     /** 
  95.      * 中序遍历 
  96.      */  
  97.     public void midTravelTree(Node node) {  
  98.         if (node != null) {  
  99.             midTravelTree(node.getLeft());  
  100.             System.out.println(node.getValue());  
  101.             midTravelTree(node.getRight());  
  102.         }  
  103.     }  
  104.   
  105.     /** 
  106.      * 后序遍历 
  107.      */  
  108.     public void postTravelTree(Node node) {  
  109.         if (node != null) {  
  110.             System.out.println(node.getValue());  
  111.             postTravelTree(node.getLeft());  
  112.             postTravelTree(node.getRight());  
  113.         }  
  114.     }  
  115.       
  116.     /** 
  117.      * @param args 
  118.      */  
  119.     public static void main(String[] args) {  
  120.         BinTree binTree = new BinTree();  
  121.         // 1,2,3,4,5,6  
  122.         // 3,1,2,6,5,4  
  123.         int[] a = { 3,1,2,6,5,4 };  
  124.         binTree.buildTree(a);  
  125.         System.out.println("pre: ");  
  126.         binTree.preTravelTree(binTree.getRoot());  
  127.         System.out.println("mid: ");  
  128.         binTree.midTravelTree(binTree.getRoot());  
  129.         System.out.println("post: ");  
  130.         binTree.postTravelTree(binTree.getRoot());  
  131.     }  
  132.   
  133. }  
  134.   
  135. class Node {  
  136.     private int value;  
  137.   
  138.     /** 
  139.      * @return the value 
  140.      */  
  141.     public int getValue() {  
  142.         return value;  
  143.     }  
  144.   
  145.     /** 
  146.      * @param value 
  147.      *            the value to set 
  148.      */  
  149.     public void setValue(int value) {  
  150.         this.value = value;  
  151.     }  
  152.   
  153.     /** 
  154.      * @return the left 
  155.      */  
  156.     public Node getLeft() {  
  157.         return left;  
  158.     }  
  159.   
  160.     /** 
  161.      * @param left 
  162.      *            the left to set 
  163.      */  
  164.     public void setLeft(Node left) {  
  165.         this.left = left;  
  166.     }  
  167.   
  168.     /** 
  169.      * @return the right 
  170.      */  
  171.     public Node getRight() {  
  172.         return right;  
  173.     }  
  174.   
  175.     /** 
  176.      * @param right 
  177.      *            the right to set 
  178.      */  
  179.     public void setRight(Node right) {  
  180.         this.right = right;  
  181.     }  
  182.   
  183.     private Node left;  
  184.     private Node right;  
  185. }  

 

 

pre: 
3
1
2
6
5
4
mid: 
1
2
3
4
5
6
post: 
3
1
2
6
5
4

你可能感兴趣的:(二叉树)