这里的二叉树可能不一定是二叉search树。 该结构可以被视为 – struct node { int data; struct node *left; struct node *right; }; 我可以和朋友一起解决的最大的解决scheme就是这样的 – 考虑这个二叉树 : 二叉树http://lcm.csa.iisc.ernet.in/dsa/img151.gif 中序遍历产生 – 8,4,9,2,5,1,6,3,7 而后序遍历产生 – 8,9,4,5,2,6,7,3,1 例如,如果我们想要find节点8和节点5的共同祖先,那么我们在中序树遍历中列出所有在8和5之间的节点,在这种情况下恰好是[4,9 ,2]。 然后我们检查这个列表中的哪个节点在后序遍历中最后出现,这是2.因此,对于8和5的共同祖先是2。 这个algorithm的复杂性,我相信是O(n)(O(n)对于inorder / postorder遍历,其余的步骤再次是O(n),因为它们只不过是数组中的简单迭代)。 但是这是错误的。 🙂 但是这是一个非常粗糙的方法,我不确定是否在某些情况下出现故障。 有没有其他(可能更优化)解决这个问题?