查找结点p和q的最近公共祖先 非递归
思路
分别找到p、q到达根结点的路径,这两条路径的最后一个相同结点就是最近公共祖先
而后序遍历的非递归算法可以保留结点的所有祖先结点(即到根结点的路径),所以使用后序遍历的非递归算法具体实现
后序遍历的非递归算法
1、若结点不为空或者栈不为空,则继续执行以下步骤
2、若结点不为空,一直找左子树
3、(结点为空)若栈不为空,并且结点的右子树被访问,退栈
4、(结点为空)若栈不为空,并且结点的右子树未被访问,标记右子树被访问,且访问右子树
分别找到p、q到达根结点的路径,这两条路径的最后一个相同结点就是最近公共祖先
而后序遍历的非递归算法可以保留结点的所有祖先结点(即到根结点的路径),所以使用后序遍历的非递归算法具体实现
1、若结点不为空或者栈不为空,则继续执行以下步骤
2、若结点不为空,一直找左子树
3、(结点为空)若栈不为空,并且结点的右子树被访问,退栈
4、(结点为空)若栈不为空,并且结点的右子树未被访问,标记右子树被访问,且访问右子树