如何在没有递归的情况下获取二叉树的祖先节点。我使用递归获得了以下代码,但是如果不使用递归则无法弄清楚如何获取。
value
答案 0 :(得分:0)
一种简单的方法涉及某种“待办事项列表”,以及Map
来跟踪祖先。待办事项列表可以是队列或堆栈。基本计划是这样的:
此时,目标的父母,祖父母等一直在链中,将在“祖先”地图中,因此打印所有祖先应该很容易。
如果您使用堆栈作为待办事项列表,则应在N.right
之前将N.left
推送到堆栈。然后你将按顺序遍历树。
如果您为待办事项列表使用队列,以便在末尾添加元素并从头开始检索它们,那么我认为遍历顺序将是广度优先搜索,其中我们遍历根,然后是下一级别的所有节点,然后是该级别以下的所有节点,等等。
这是我能想到的最简单的答案,它可以提供一个模板,用于解决其他树遍历问题而无需递归。 (另外它适用于其他类型的图形,如果你添加逻辑以确保你不会两次访问节点。)就空间效率而言,它不是最好的答案。有些想法,你可以想出一个不使用Map
的算法,并且不会将一个节点的子节点推送到堆栈或队列上(这样最大堆栈大小会更小)