一尘不染

我如何遍历二叉树?

algorithm

现在我有

 private static void iterateall(BinaryTree foo) {
    if(foo!= null){
    System.out.println(foo.node);
    iterateall(foo.left);
    iterateall(foo.right);
   }
  }

您可以将其更改为Iteration而不是递归吗?


阅读 200

收藏
2020-07-28

共1个答案

一尘不染

您可以将其更改为Iteration而不是递归吗?

您可以使用显式堆栈。伪代码:

private static void iterateall(BinaryTree foo) {
    Stack<BinaryTree> nodes = new Stack<BinaryTree>();
    nodes.push(foo);
    while (!nodes.isEmpty()) {
        BinaryTree node = nodes.pop();
        if (node == null)
            continue;
        System.out.println(node.node);
        nodes.push(node.right);
        nodes.push(node.left);
    }
}

但这并不真正优于递归代码(除了代码中缺少的基本条件)。

2020-07-28