在给定以下约束的情况下,是否有高效,实用方法迭代二叉树:
编辑:
答案 0 :(得分:9)
它只能用于深度达到一定限度的树(因此也可以用于元素数量),因为它需要与树深度成比例的辅助存储器;当你在一个项目上进行迭代时,你需要跟踪下一个要进行的项目,如果你是最深的一个叶子,那么所需的“保持跟踪指针”的数量将是只比树的深度小1。例如,如果您可以接受限制为32的深度(因此不超过4,294,967,295个节点),则需要一个32位指针的辅助固定大小数组(加上其上的索引)。
对于非完全退化的二进制树(因此有许多节点大致与2**depth
成比例,而不仅仅是depth
;-),这个固定数量的辅助内存应该是可接受的 - 即,只需按log(N)
指针的顺序修复辅助内存,以便在具有最多N
个节点的任何树上进行迭代。如果这是不可接受的,那么您的问题的答案“是否......?”是否; - )。
答案 1 :(得分:5)
如果保证树的值按其值排序并且这些值严格上升(所有B> A,而不仅仅是B> = A),那么您可以使用无动态内存遍历无限大小的树。不过,你确实会受到性能影响。
要在值A之后找到下一个值,只需再次下降到树中,执行二进制(当然)搜索大于A的值。
我只是想到了这一点。如果有人可以证明我的想法是错误的,请继续!