【问题标题】:What approach should I used to traverse through a binary tree in a side to side manner in Java? [duplicate]我应该使用什么方法在 Java 中以左右方式遍历二叉树? [复制]
【发布时间】:2017-12-29 23:21:13
【问题描述】:

我已经对如何遍历二叉树进行了大量研究,但我仍然没有找到一种方法来遍历一棵树而不一直到它的叶子。我只想一次打印一层二叉树,而不是使用 In-Order-Traversal、Pre-Order-Traversal 或 Post-Order-Traversal 结果。

我要打印:{2, 7, 5, 2, 6, null, 9, null, null, 5, 11, 4, null}。我可以使用递归来解决这个问题吗?因为在我解决其他非叶子之前,我似乎总是在一侧的叶子上结束。

【问题讨论】:

  • 这里的关键词是“广度优先”,如果你先去叶子,它被称为“深度优先”。谷歌了解如何实施“广度优先”。
  • 你想要的不是典型的二叉树遍历,因为遍历是递归的访问方式 (root - leftChild - rightChild), (leftChild - root - rightChild), (leftChild - rightChild - root )。你会发现那里没有其他可能性。

标签: java algorithm binary-tree


【解决方案1】:

在伪代码中:

  • 创建节点队列(Java 中的Deque,例如LinkedList
  • 将根节点放入队列
  • 当队列不为空时
    • 从头部取出下一个节点
    • 将其子项放在队列的末尾
    • 处理节点

基本上,要处理广度优先(这是您想要的),请使用队列。要处理深度优先,请使用堆栈

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-12
    • 1970-01-01
    • 1970-01-01
    • 2016-01-09
    • 2021-11-17
    • 1970-01-01
    相关资源
    最近更新 更多