Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从下至上扫描树结构?_Java_Algorithm_Tree - Fatal编程技术网

Java 从下至上扫描树结构?

Java 从下至上扫描树结构?,java,algorithm,tree,Java,Algorithm,Tree,如果给定以下树结构或类似结构: 我希望返回字符串ZYXWVUT。我知道如何使用二叉树来实现这一点,但二叉树不能包含多个子节点。任何帮助都将不胜感激。像这样的东西就可以了 public void traverse(){ for(Child child : this.children){ child.traverse(); } System.out.print(this.value); } 这称为:在打印节点本身的内容之前,先打印树的所有子树的内容 这可

如果给定以下树结构或类似结构:


我希望返回字符串ZYXWVUT。我知道如何使用二叉树来实现这一点,但二叉树不能包含多个子节点。任何帮助都将不胜感激。

像这样的东西就可以了

public void traverse(){
    for(Child child : this.children){
        child.traverse();
    }
    System.out.print(this.value);
}
这称为:在打印节点本身的内容之前,先打印树的所有子树的内容

这可以递归完成,如下所示(伪代码):


如果要维护ArrayList(例如node_list)以跟踪从当前树节点分支的节点数,则可以从根遍历树,直到找到具有空node_list的节点。这样,您将能够识别树的叶节点。递归方法适用于这种情况。我还没有测试代码,但我相信这应该适用于您提出的问题:

如果您正在维护类似于以下类的内容以构建树:

class Node {
     String data;
     ArrayList<Node> node_list;}

本质上,您所看到的是树的后序深度优先遍历。

您将本质上寻找一种“反向”宽度优先算法。编辑:只需阅读树,如果您正在查找
ZYXWVUT
,那么这只是一个深度优先列表…看起来像是postorder遍历,我想澄清一下:您想按节点在树中的深度打印节点吗?因为仅凭你的例子,说出你的问题是很复杂的。编辑成包含一张图片,希望你不介意。至于OP所关心的“我知道如何处理二叉树,但不能处理多个子节点的二叉树”:我认为树遍历可以处理任意数量子节点的树。
class Node {
     String data;
     ArrayList<Node> node_list;}
public void traverse_tree(Node n){
    if(n.node_list.isEmpty()){
        System.out.print(n.data);
    }
    else{
        for(Node current_node:n.node_list){
            traverse_tree(current_node);
        }
        System.out.println(n.data);
    }
}