【问题标题】:Iterate over all nodes in a recursively defined tree遍历递归定义树中的所有节点
【发布时间】:2019-03-06 17:26:44
【问题描述】:

我正在尝试创建一个节点类,我最终将能够将其用于极小极大搜索,但是我在遍历树中的所有节点时遇到了麻烦(在这种情况下,对于一个简单的字符串函数)。

这里是递归到字符串方法的定义。

    public String toString(){
        if(!this.isLeaf()){
            String text = "";
            Iterator<Node<T>> iter = children.iterator();
            while(iter.hasNext()){
                    Node child = iter.next();
                    text = "/" + child.toString();
            }
            return text;
        }else{

            return cargo.toString() ;
        }
    }

在阅读了其他答案后,我尝试使用上面代码中的 Iterator 接口,但它仍然无法正常工作。 (我也对这样做的非递归方法持开放态度)

【问题讨论】:

  • 所以你想找到树的最大值?还是只访问每个节点一次?访问节点的任何特定顺序?

标签: java recursion


【解决方案1】:

你是说+=吗?

text += "/" + child.toString();
     ^

【讨论】:

    【解决方案2】:

    我假设您打算按照汤姆的回答连接由“/”分隔的子值。

    如果您打算构建一个字符串,使用 StringBuffer 会更有效,因为否则每次循环时都必须分配一个新 String 来获取新值,而 StringBuffer 会在缓冲区中构建。

    StringBuffer text = new StringBuffer();
    
    for (Node<T> child : children) {
      text.append('/');
      text.append(child.toString());
    }
    return text.toString;
    

    我使用了 for-each 样式循环,但您使用的 'while' 循环仍然可以正常工作。

    【讨论】:

      猜你喜欢
      • 2012-12-12
      • 1970-01-01
      • 2020-08-15
      • 1970-01-01
      • 2015-01-19
      • 2023-03-14
      • 2018-07-12
      • 2014-03-11
      • 1970-01-01
      相关资源
      最近更新 更多