1. 程式人生 > >Java 多叉樹的簡單實現

Java 多叉樹的簡單實現

Node實體:

package com.javatest.NodeA;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by Joker on 2017/5/27.
 */
public class Node<T> implements Serializable {

    private Node parentNode;
    private T nodeEntity;
    private List<Node> childNodes;

    public Node (T nodeEntity){
        this.nodeEntity=nodeEntity;
    }

    public Node (){}

    public void addChildNode(Node childNode){
        childNode.setParentNode(this);
        if ( this.childNodes==null){
            this.childNodes = new ArrayList<Node>();
        }
        this.childNodes.add(childNode);
    }

    public void removeChildNode(Node childNode){
        if (this.childNodes!=null){
            this.childNodes.remove(childNode);
        }
    }

    public Node getParentNode() {
        return parentNode;
    }

    public void setParentNode(Node parentNode) {
        this.parentNode = parentNode;
    }

    public T getNodeEntity() {
        return nodeEntity;
    }

    public void setNodeEntity(T nodeEntity) {
        this.nodeEntity = nodeEntity;
    }

    public List<Node> getChildNodes() {
        return childNodes;
    }

    public void setChildNodes(List<Node> childNodes) {
        this.childNodes = childNodes;
    }
}

測試:

package com.javatest.NodeA;

/**
 * Created by Joker on 2017/5/27.
 */
public class Test {

    public static  void main(String args[]){

        Node root = new Node("電影");
        Node A = new Node("科幻電影");
        Node Aa = new Node("太空科幻電影");

        Node Ab  = new Node("地球科幻電影");
        Node Ab1= new Node("《地球的起源》");
        Node Ab2= new Node("《地球的終點》");

        Node Ac = new Node("月球科幻電影");
        Node Ad = new Node("宇宙科幻電影");

        Node B = new Node("動作電影");
        Node Ba = new Node("好萊塢電影");
        Node Bb = new Node("大陸電影");
        Node Bc = new Node("香港電影");

        root.addChildNode(A);
            A.addChildNode(Aa);
            A.addChildNode(Ab);
                Ab.addChildNode(Ab1);
                Ab.addChildNode(Ab2);
            A.addChildNode(Ac);
            A.addChildNode(Ad);
        root.addChildNode(B);
            B.addChildNode(Ba);
            B.addChildNode(Bb);
            B.addChildNode(Bc);

        System.out.println(root.getNodeEntity());
        printNodeTree(root);

    }

    public static void printNodeTree(Node<String> node){
        for (Node<String> childNode: node.getChildNodes()) {
            System.out.println(childNode.getNodeEntity().toString());
            if (childNode.getChildNodes()!=null){
                printNodeTree(childNode);
            }
        }
    }


}
最後列印結果:
電影
 科幻電影
  太空科幻電影
  地球科幻電影
   《地球的起源》
   《地球的終點》
  月球科幻電影
  宇宙科幻電影
 動作電影
  好萊塢電影
  大陸電影
  香港電影