我正在处理一个编码问题,需要找到节点的路径。使用递归和深度优先搜索(DFS),这非常容易实现。
public ArrayList<Integer> ancestorsList = new ArrayList<Integer>();
public boolean printAncestors(TreeNode root, int nodeData) {
if (root == null) return false;
if (root.data == nodeData) return true;
boolean found = printAncestors(root.left, nodeData) || printAncestors(root.right, nodeData);
if (found) ancestorsList.add(root.data);
return found;
}
然而,我总是有问题将递归算法转换为迭代算法,尽管递归只是使用程序堆栈。我对代码进行了一些试验,但似乎迭代算法需要一个将子节点连接到其父节点的映射,以便在找到节点时可以回溯。
我只是想知道是否有更简单的方式,或者最简单的方法是否真的是使用一个将父节点和子节点链接起来的映射,以便您能够回溯。
谢谢!
TreeNode
中或者添加一个标志来标记当前节点是否被访问过。 - TongChen