我需要遍历二叉树,跳过符合条件的任何节点的子节点。
这实现了树引导的聚类方法;当子树的叶子共同满足条件时,它们被认为是一个簇。
似乎启动的地方是预先遍序,但我不确定如何修改算法以跳过当前节点的所有子节点。
更新
除了以下两个(正确的)答案之外,还可以使用以下Java库:
getAllExternalDescendants
和Newick-to-XML转换器实现树答案 0 :(得分:1)
第一部分很简单:
class Tree {
Tree(int data) {
this.data = data;
}
Tree left, right;
Object object;
int data;
}
public class Main {
static void myPreorder(Tree tree) {
if (tree == null) return;
if (tree.data > 2) {
System.out.println("skipping " + tree.data);
return;
}
System.out.println("visiting " + tree.data);
myPreorder(tree.left);
myPreorder(tree.right);
}
public static void main(String[] args) {
Tree root = new Tree(1);
root.left = new Tree(2);
root.right = new Tree(3);
root.right.left = new Tree(4);
root.right.right = new Tree(5);
myPreorder(root);
}
}
第二部分:“......当他们共同满足条件时,子树的叶子被认为是一个簇。......”很难。你需要检查一个节点的所有叶子,看它们是否符合跳过条件。
答案 1 :(得分:1)
如果通过跳过所有孩子,你不仅指直接后代而且是他们的整个子树,你可以做以下事情:
public void traverse(Node n){
if (n==null)
return;
doSomethingWith(n);
if (!conditionIsMet(n)){
traverse(n.left);
traverse(n.right);
}
}