
![image](https://user-images.githubusercontent.com/12162539/50417924-d6cc2b80-0863-11e9-860f-bf9d132db570.png)

final List<Node> children = new ArrayList<Node>();
        /**
         * begin timestamp
         */
        private long beginTimestamp;
        /**
         * end timestamp
         */
        private long endTimestamp;
        /**
         * construct root node
         */
        private Node(Object data) {
            this.parent = null;
            this.data = data;
        }
        /**
         * construct a regular node
         *
         * @param parent parent node
         * @param data   node data
         */
        private Node(Node parent, Object data) {
            this.parent = parent;
            this.data = data;
            parent.children.add(this);
        }
        /**
         * is the current node the root node
         *