【发布时间】:2012-06-29 23:11:30
【问题描述】:
如何打印二叉树的外框。
- 顺序是从上到下、从左到右、再从下到上
- 打印所有最左边和最右边的节点
- 打印所有叶节点
-
打印所有只有 1 个叶子的节点
100 / \ 50 150 / \ / 24 57 130 / \ \ \ 12 30 60 132
例如: 输出应该是 100、50、24、12、30、57、60、130、132、150
如果我们编写三个不同的函数来打印左节点、叶节点和右节点,这很容易解决,但需要 O(n+2logn) 时间。
我也在寻找一种 O(n) 的方法,但条件是每个节点只能访问一次,不想要这个额外的 O(2logn) 部分。
【问题讨论】:
-
O(n+2logn)是O(n)。 -
@interjay 是对的,我们可以跳过它等于 o(n) 的常数部分
-
geeksforgeeks.org/archives/2755 检查这个。它的时间和空间复杂度等于简单的遍历算法
-
@interjay 我知道 O(n+2logn) 是 O(n),但我说的是不同的......算法应该只访问每个节点一次。
-
stackoverflow.com/questions/4932235/… 检查这个。它只会遍历每个节点一次。它使用递归
标签: algorithm binary-tree