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

          數(shù)據(jù)結(jié)構(gòu)中的樹

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

          /**
           * 結(jié)點數(shù)據(jù)
           * @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 查找到的結(jié)點
               */
              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;     //作為插入結(jié)點的父結(jié)點
                      
                      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();
              }

          }



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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 固安县| 建平县| 宽城| 合阳县| 剑河县| 牟定县| 陆河县| 如东县| 安多县| 天峻县| 阳山县| 贵阳市| 新龙县| 宜宾市| 安多县| 新营市| 佛坪县| 乐昌市| 渝北区| 武义县| 闽清县| 普兰店市| 锡林浩特市| 高雄市| 新津县| 肇州县| 九龙县| 扶余县| 拉萨市| 亚东县| 娱乐| 肇源县| 信丰县| 西畴县| 关岭| 青河县| 左云县| 开鲁县| 金寨县| 齐河县| 泰和县|