Questions tagged «least-common-ancestor»

30
如何在任何二叉树中找到两个节点的最低公共祖先?
这里的二叉树不一定是二叉搜索树。 该结构可以视为- struct node { int data; struct node *left; struct node *right; }; 我可以和一个朋友一起解决的最大解决方案就是这种情况- 考虑这个二叉树: 有序遍历收益-8,4,9,2,5,5,1,6,3,7 后订单遍历收益-8、9、4、5、2、6、7、3、1 因此,例如,如果我们要找到节点8和5的公共祖先,那么我们将列出在有序树遍历中8到5之间的所有节点的列表,在这种情况下碰巧是[4,9 ,2]。然后,我们检查此列表中的哪个节点在后遍历中最后出现,即2。因此,8和5的共同祖先是2。 我认为该算法的复杂度为O(n)(对于有序/后序遍历为O(n),其余步骤又为O(n),因为它们仅是数组中的简单迭代)。但是很有可能这是错误的。:-) 但这是一种非常粗糙的方法,我不确定在某些情况下它是否会崩溃。是否还有其他(可能是最佳的)解决方案?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.