在具有父指针和子指针的通用树结构中,是否可以在不遍历完整树的情况下遍历叶节点?例如,从最左边的叶节点开始。想法是在深树上进行优化。
答案 0 :(得分:2)
如果用通用c ++指针方式表示树,其中一个根指向子节点,则无法实现此目的,因为树是非循环图。
如果以不同的方式表示树(比如使用数组作为堆),则只能遍历数组中偏移量的子项。
请注意,平衡二叉树的叶子占树大小的一半,因此只通过遍历叶子就不会增加复杂性。对于平衡三元和其他几乎完全的n元树,该分数是一个更大的数字。
答案 1 :(得分:0)
没有。要到达每个叶子,您必须遍历每个节点。
因为树是非循环的,所以没有冗余路径。因此,没有"额外"获得名额的方法,因此没有捷径可以采取。每个节点都是(a)叶子,或(b)在一个或多个叶子的关键路径上。
必须以某种方式增强数据结构以优化叶子遍历。