疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

Java模拟二叉树实现


 

        二叉树的概念不说了,搜索引擎比我说的更加清楚和完整。


      下面的例子允许将各种java.lang.Comparable<T>的子类作为节点元素被添加到二叉树结构当中,并依据二叉树的中序遍历的方式将二叉树结构当中所有元素输出。


      二叉树结构的Java实现类

 

Java代码
  1. package org.tang.binarytree;   
  2.   
  3. public class BinaryTree<T extends Comparable<T>> {   
  4.     private Node<T> root;   
  5.        
  6.     public Node<T> getRoot() {   
  7.         return root;   
  8.     }   
  9.   
  10.     public void setRoot(Node<T> root) {   
  11.         this.root = root;   
  12.     }   
  13.        
  14.     public void addElement(T element){   
  15.         if(element == null){   
  16.             return;   
  17.         }   
  18.         Node<T> node = new Node<T>(element);   
  19.         if(this.root == null){   
  20.             this.root = node;   
  21.         }else{   
  22.             this.root.addChild(node);   
  23.         }   
  24.     }   
  25.        
  26.     public void printBinaryTree(){   
  27.         if(this.root == null){   
  28.             System.out.println("当前为空对象,无法打印。");   
  29.             return;   
  30.         }   
  31.         this.root.printNode();   
  32.     }   
  33.        
  34.     private static class Node<E extends Comparable<E>>{   
  35.         private E nodeData;   
  36.         private Node<E> left;   
  37.         private Node<E> right;   
  38.         private Node(E nodeData){   
  39.             this.nodeData = nodeData;   
  40.         }   
  41.            
  42.         private void addChild(Node<E> child){   
  43.             if(child == null){   
  44.                 return;   
  45.             }   
  46.             if(this.compareTo(child) >= 0){   
  47.                 if(this.left == null){   
  48.                     this.left = child;   
  49.                 }else{   
  50.                     this.left.addChild(child);   
  51.                 }   
  52.             }else{   
  53.                 if(this.right == null){   
  54.                     this.right = child;   
  55.                 }else{   
  56.                     this.right.addChild(child);   
  57.                 }   
  58.             }   
  59.         }   
  60.            
  61.         private int compareTo(Node<E> node){   
  62.             return this.nodeData.compareTo(node.nodeData);   
  63.         }   
  64.            
  65.         private void printNode(){   
  66.             if(this.left != null){   
  67.                 this.left.printNode();   
  68.             }   
  69.             System.out.println(this.nodeData.toString());   
  70.             if(this.right != null){   
  71.                 this.right.printNode();   
  72.             }   
  73.         }   
  74.     }   
  75. }  

 

      二叉树实现类的使用方式

 

Java代码
  1. package org.tang.binarytree;   
  2.   
  3. public class Client {   
  4.     public static void main(String[] args){   
  5.         BinaryTree<Integer> bt = new BinaryTree<Integer>();   
  6.         bt.addElement(101);   
  7.         bt.addElement(45);   
  8.         bt.addElement(49);   
  9.         bt.addElement(1);   
  10.         bt.addElement(20);   
  11.         bt.addElement(-1);   
  12.         bt.printBinaryTree();   
  13.            
  14.         BinaryTree<String> bt2 = new BinaryTree<String>();   
  15.         bt2.addElement("a");   
  16.         bt2.addElement("A");   
  17.         bt2.addElement("z");   
  18.         bt2.addElement("e");   
  19.         bt2.printBinaryTree();   
  20.     }   
  21. }