树上两个结点的公共祖先

论坛 期权论坛 编程之家     
选择匿名的用户   2021-5-21 09:12   59   0

这道题可以分为好几种情况:

首先,节点只有左、右子树,没有parent指针,不是二叉搜索树


这种情况我们可以进行深度搜索,在某一节点下,我们进行深度搜索,如果其孩子正好有等于a子节点,则返回该子节点,同理可以适用于b子节点。

BinaryTreeNode* FindCommonParent(BinaryTreeNode* root, BinaryTreeNode* a, BinaryTreeNode* b)
{
 if(root == NULL)
 {
  return NULL;
 }
 if(root == a || root == b)
 {
  return root;
 }

 BinaryTreeNode* left = FindCommonParent(root->lchild, a, b);
 BinaryTreeNode* right = FindCommonParent(root->rchild, a, b);

 if(left && right)
 {
  return root;
 }

 return left ? left : right;
}


分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP