java語言實現樹
阿新 • • 發佈:2017-05-20
span 前序 java語言 wot root 存儲 public == class
首先用Node類定義一個節點,用來存儲每個節點的內容:
public class Node { // 關鍵字 private int keyData; // 其他數據 private int otherData; // 左子節點 private Node leftNode; // 右子節點 private Node rightNode; public Node(int keyData, int otherDate) { this.keyData = keyData; this.otherData = otherDate; } public int getKeyData() { return keyData; } public void setKeyData(int keyData) { this.keyData = keyData; } public Node getLeftNode() { return leftNode; } public void setLeftNode(Node leftNode) { this.leftNode = leftNode; }public int getOtherData() { return otherData; } public void setOtherData(int otherData) { this.otherData = otherData; } public Node getRightNode() { return rightNode; } public void setRightNode(Node rightNode) { this.rightNode = rightNode; }// 顯示方法 public void display(){ System.out.println(keyData + "," + otherData); } }
然後定義一個Tree類,並用前序遍歷、中序遍歷和後序遍歷
public class Tree { // 根 private Node root; // 插入方法 public void insert(int keyData, int otherData) { Node newNode = new Node(keyData, otherData); // 如果說沒有節點 if (root == null) { root = newNode; } else { Node current = root; Node parent; while (true) { parent = current; if (keyData < current.getKeyData()) { current = current.getLeftNode(); if (current == null) { parent.setLeftNode(newNode); return; } } else { current = current.getRightNode(); if (current == null) { parent.setRightNode(newNode); return; } } } } } // 查找方法 public Node find(int keyData) { Node current = root; while (current.getKeyData() != keyData) { if (keyData < current.getKeyData()) { current = current.getLeftNode(); } else { current = current.getRightNode(); } if (current == null) { return null; } } return current; } // 修改方法 public void change(int keyData, int newOtherData) { Node findNode = find(keyData); findNode.setOtherData(newOtherData); } // 先序遍歷 public void preOrder(Node node) { if (node != null) { node.display(); preOrder(node.getLeftNode()); preOrder(node.getRightNode()); } } // 中序遍歷 public void inOrder(Node node) { if (node != null) { inOrder(node.getLeftNode()); node.display(); inOrder(node.getRightNode()); } } // 後序遍歷 public void endOrder(Node node) { if (node != null) { endOrder(node.getLeftNode()); endOrder(node.getRightNode()); node.display(); } } public Node getRoot() { return root; } }
測試:
Tree tree = new Tree(); tree.insert(80, 80); tree.insert(49, 49); tree.insert(42, 42); tree.insert(30, 30); tree.insert(45, 45); tree.insert(90, 90); tree.insert(150, 150); tree.insert(130, 130); tree.insert(82, 82); System.out.println("前序遍歷:"); tree.preOrder(tree.getRoot()); System.out.println("中序遍歷:"); tree.inOrder(tree.getRoot()); System.out.println("後序遍歷:"); tree.endOrder(tree.getRoot());
java語言實現樹