求二叉树中两个最近的公共祖先结点

先解释一下这道题的意思,就是给定一棵二叉树,然后这棵树上有两个结点,请找出他们两个的最近公共祖先,也就是它们两个距离最近的公共结点,例如:

在这里插入图片描述
上面这棵树中D和F的最近公共祖先就是A,D和E的最近公共祖先就是B。

那么我们会发现如果这两个结点分别在root的左右两颗子树上,那么它们两个的最近公共祖先一定是根节点。代码如下:

BNode *GetNearestAncestor(BNode *root, BNode *n1, BNode *n2)
{
	BNode *n1InLeft = Search(root->left, n1->data);
	BNode *n2InLeft = Search(root->left, n2->data);
	if (!n1InLeft&&n2InLeft)
	{
		return root;
	}
	if (n1InLeft && !n2InLeft)
	{
		return root;
	}
	if (n1InLeft)
	{
		return GetNearestAncestor(root->left, n1, n2);
	}
	else {
		return GetNearestAncestor(root->right, n1, n2);
	}

}

猜你喜欢

转载自blog.csdn.net/qq_40550018/article/details/83792568