问题:
找出二叉树中两个节点的最近公共祖先。
首先可以先参考下这个博客http://blog.youkuaiyun.com/cxllyg/article/details/7635992 ,写的比较详细,包括了节点包含父指针和不包括父指针的情况,还介绍了经典的Tarjan算法。
Tarjan算法很精妙,但是使用了并查集,需要额外O(n)的存储空间。上面博客中给的第三个方法也是需要记录根到节点的路径,需要O(log n)空间,当然考虑到一般情况下我们遍历树都是递归的方式,所以本身方法调用栈就是O(log n)空间占用率。 但是这是对于平衡的二叉树而言的,在最差情况下空间占用率还是O(n)。
所以,这里我给的算法不需要记录根到节点的路径,而且仅仅遍历树一遍就可以完成。