查找k-ary树中给定节点的深度

时间:2017-03-28 19:38:33

标签: java tree

我有一个k-ary树,我需要能够在构建树之后计算节点的深度。

这是树类

public class DirectoryTree implements Serializable {

    private TreeNode Root;
    private int numNodes;
    private TreeNode Focus;
    private LocalDateTime date;
    private long totalSizeOnDisk;

继承TreeNode类:

public class TreeNode implements Serializable{

    private FileSystemEntry data;
    private boolean directory;
    private TreeNode parent;
    private ArrayList<TreeNode> children;
    private int numChildren;
    private int nodeKey;
    private int depth;

我最初的想法是以广度优先顺序排列树的所有节点,并使用numNodes变量,弹出给定节点子节点并将其深度设置为计数器变量的任何值,但这不起作用然后我无法读取弹出的节点,以便找到他们孩子的深度。所以我似乎需要一个递归算法或类似的东西。也许首先修改广度?:

public void BFTree() {

    Queue<TreeNode> queue = new LinkedList<TreeNode>();
    queue.add(this.Root);
    TreeNode current;
    while ((current = queue.poll()) != null) {
        BFTree(current, queue);
    }
}

private void BFTree(TreeNode n, Queue<TreeNode> queue) {

    System.out.println(n.getData().getName());
    if (n.isDirectory()) {
        for (int i = 0; i < n.getChildren().size(); i++) {
            queue.add(n.getChildren().get(i));
        }
    }
}

1 个答案:

答案 0 :(得分:0)

如果其他人偶然发现了这个

我刚刚修改了我的第一次遍历:

if(!n.equals(this.Root)){
        n.setDepth(n.getParent().getDepth() + 1);
}

显然,给定节点的深度只是其父亲的深度+ 1.根没有父节点,所以我只是在访问/基本情况函数中将其定义为0