从下往上扫描树形结构?

时间:2013-11-19 03:23:21

标签: java algorithm tree

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

enter image description here

我希望返回字符串ZYXWVUT。我知道如何使用二叉树执行此操作,但不能使用多个子节点。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:12)

这称为post-order traversal of a tree:在打印节点本身的内容之前打印树的所有子树的内容。

Post-order traversal

这可以递归完成,就像这样(伪代码):

function post_order(Tree node)
    foreach n in node.children
        post_order(n)
    print(node.text)

答案 1 :(得分:1)

如果要维护ArrayList(比如node_list)以跟踪当前树节点的节点分支数,则可以从根遍历树,直到找到具有空node_list的节点。这样您就可以识别树的叶节点。递归方法适用于这种情况。我没有测试过代码,但我相信这应该适用于您所要求的内容:

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

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);
    }
}

基本上你正在看的是树的后序深度优先遍历。

答案 2 :(得分:0)

这样的事情应该这样做

public void traverse(){
    for(Child child : this.children){
        child.traverse();
    }
    System.out.print(this.value);
}