Java中树的存储结构实现(2)

// 返回包含指定值的节点
    public int pos(Node node) {
        for (int i = 0; i < treeSize; i++) {
            // 找到指定节点
            if (nodes[i] == node) {
                return i;
            }
        }
        return -1;
    }

}

测试类:

package com.ietree.basic.datastructure.tree;

import java.util.List;

/**
 * Created by ietree
 * 2017/4/30
 */
public class treeParentTest {

public static void main(String[] args) {

TreeParent<String> tp = new TreeParent<String>("root");
        TreeParent.Node root = tp.root();
        System.out.println(root);
        tp.addNode("节点1", root);
        System.out.println("此树的深度:" + tp.deep());
        tp.addNode("节点2", root);
        // 获取根节点的所有子节点
        List<TreeParent.Node<String>> nodes = tp.children(root);
        System.out.println("根节点的第一个子节点:" + nodes.get(0));
        // 为根节点的第一个子节点新增一个子节点
        tp.addNode("节点3", nodes.get(0));
        System.out.println("此树的深度:" + tp.deep());

}
}

程序输出:

TreeParent$Node[data=root, parent=-1]
此树的深度:2
根节点的第一个子节点:TreeParent$Node[data=节点1, parent=0]
此树的深度:3

三、子节点链表示法

让父节点记住它的所有子节点。

package com.ietree.basic.datastructure.tree;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by ietree
 * 2017/4/30
 */
public class TreeChild<E> {

private static class SonNode {
        // 记录当前节点的位置
        private int pos;
        private SonNode next;

public SonNode(int pos, SonNode next) {
            this.pos = pos;
            this.next = next;
        }
    }

public static class Node<T> {
        T data;
        // 记录第一个子节点
        SonNode first;

public Node(T data) {
            this.data = data;
            this.first = null;
        }

public String toString() {
            if (first != null) {
                return "TreeChild$Node[data=" + data + ", first=" + first.pos + "]";
            } else {
                return "TreeChild$Node[data=" + data + ", first=-1]";
            }
        }
    }

private final int DEFAULT_TREE_SIZE = 100;
    private int treeSize = 0;
    // 使用一个Node[]数组来记录该树里的所有节点
    private Node<E>[] nodes;
    // 记录节点数
    private int nodeNums;

// 以指定根节点创建树
    public TreeChild(E data) {
        treeSize = DEFAULT_TREE_SIZE;
        nodes = new Node[treeSize];
        nodes[0] = new Node<E>(data);
        nodeNums++;
    }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/20b33c3dc305f42e978657eebf7e9b1a.html