要求考虑以下三种种情况,给出解决方案,并解决:
1:二叉树是搜索二叉树。
2: 二叉树每个节点有parent(三叉链)
3:就是普通二叉树。(尽可能实现时间复杂度为O(N))
针对第一种情况,是一棵二叉搜索树,我们可以根据数据的大小来判断两个节点的位置,如果在根节点的2侧,则根节点为最近公共祖先,如果在根节点的同侧,继续寻找2个节点的位置
TreeNode* PublicLowParent(TreeNode *root, TreeNode*c1, TreeNode* c2)
{
if (root == NULL)
return NULL;
TreeNode* cur = root;
while (cur)
{
if (c1->data > cur->data&&c2->data > cur->data)
{
//x1,x2都在右子树