1. 程式人生 > >java語言實現樹

java語言實現樹

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語言實現樹