posts - 13, comments - 7, trackbacks - 0, articles - 0

          數據結構中的樹

          Posted on 2008-10-24 00:06 eyejava 閱讀(285) 評論(0)  編輯  收藏
          package tree;

          /**
           * 結點數據
           * @author jiaqiang
           *
           */
          public class Node {
              private int key;
              private int data;
              private Node leftChild;
              private Node rightChild;
              
              public Node() {}
              
              public Node(int key, int data) {
                  this.key = key;
                  this.data = data;
              }

              public int getKey() {
                  return key;
              }

              public int getData() {
                  return data;
              }

              public Node getLeftChild() {
                  return leftChild;
              }

              public void setLeftChild(Node leftChild) {
                  this.leftChild = leftChild;
              }

              public Node getRightChild() {
                  return rightChild;
              }

              public void setRightChild(Node rightChild) {
                  this.rightChild = rightChild;
              }
              
              public void display() {
                  System.out.print(data + " ");
              }
          }

          -------------------
          package tree;

          /**
           * 二叉樹
           * @author jiaqiang
           *
           */
          public class Tree {
              private Node root;
              private int size;
              
              /**
               * 查找某個值
               * @param key   要查找的值
               * @return Node 查找到的結點
               */
              public Node find(int key) {
                  Node current = root;
              
                  while ((current!=null) && (current.getKey()!=key)) {
                      if (key < current.getKey()) {           //go left
                          current = current.getLeftChild();
                      } else {
                          current = current.getRightChild();  //go right
                      }
                      
                      if (current == null) {
                          return null;
                      }
                  }
                  
                  return current;
              }
              
              /**
               * 插入某個值
               * @param key
               * @param data
               */
              public void insert(int key, int data) {
                  Node newNode = new Node(key, data);
                  
                  if (root == null) {  //空樹
                      root = newNode;
                      size++;
                  } else {             //not empty tree
                      Node current = root;
                      Node parent;     //作為插入結點的父結點
                      
                      while (true) {
                          parent = current;
                          if (key < current.getKey()) {
                              current = current.getLeftChild();
                              if (current == null) {
                                  parent.setLeftChild(newNode);
                                  size++;
                                  return;
                              }
                          } //end if go left
                          else {
                              current = current.getRightChild();
                              if (current == null) {
                                  parent.setRightChild(newNode);
                                  size++;
                                  return;
                              }
                          } //end if go right
                      } // end while (true)
                  }
              } //end insert
              
              /**
               * 中序遍歷,該方法為輔助方法
               * @param Node localRoot
               */
              private void inOrder(Node localRoot) {
                  if (localRoot != null) {
                      inOrder(localRoot.getLeftChild());
                      localRoot.display();
                      inOrder(localRoot.getRightChild());
                  } else
                      return;
              }
              
              /**
               * 中序遍歷
               */
              public void inOrder() {
                  inOrder(root);
              }
              
              public int getSize() {
                  return size;
              }

              public static void main(String[] args) {
                  Tree tree = new Tree();
                  tree.insert(23, 23);
                  tree.insert(20, 20);
                  tree.insert(24, 24);
               
                  
                  System.out.println(tree.getSize());
                  tree.inOrder();
              }

          }



          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 集安市| 儋州市| 新乡县| 邹平县| 温宿县| 荃湾区| 杭锦后旗| 上饶县| 阳原县| 确山县| 新丰县| 台中市| 蒲江县| 韶关市| 同江市| 永靖县| 澄迈县| 临汾市| 南乐县| 大兴区| 惠东县| 洛南县| 荆门市| 江华| 高密市| 武宣县| 兴隆县| 盐城市| 桑植县| 博湖县| 阿瓦提县| 巍山| 彰化市| 承德市| 清徐县| 永寿县| 体育| 子长县| 兰考县| 金坛市| 恭城|