我有一个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));
}
}
}
答案 0 :(得分:0)
如果其他人偶然发现了这个
我刚刚修改了我的第一次遍历:
if(!n.equals(this.Root)){
n.setDepth(n.getParent().getDepth() + 1);
}
显然,给定节点的深度只是其父亲的深度+ 1.根没有父节点,所以我只是在访问/基本情况函数中将其定义为0