】试编写算法,求二叉树T中结点a和b的最近共同祖先。
答案:1 悬赏:40 手机版
解决时间 2021-04-20 01:37
- 提问者网友:夢醒日落
- 2021-04-19 19:15
】试编写算法,求二叉树T中结点a和b的最近共同祖先。
最佳答案
- 五星知识达人网友:傲气稳了全场
- 2021-04-19 20:10
后序遍历即可,在访问结点的时候判定A和B是否都被访问了即可。
bool getCommonParent(TreeNode *root, TreeNode *A, TreeNode *B, TreeNode **p)
{
if (root == NULL)
return false;
bool leftHasAorB = getCommonParent(root->left, A, B, p);
bool rightHasAorB = getCommonParent(root->right, A, B, p);
if ((leftHasAorB && rightHasAorB) ||
((leftHasAorB || rightHasAorB) && (root == A || root == B)))
*p = root;
if (leftHasAorB || rightHasAorB)
return true;
if (root == A || root == B)
return true;
return false;
}
bool getCommonParent(TreeNode *root, TreeNode *A, TreeNode *B, TreeNode **p)
{
if (root == NULL)
return false;
bool leftHasAorB = getCommonParent(root->left, A, B, p);
bool rightHasAorB = getCommonParent(root->right, A, B, p);
if ((leftHasAorB && rightHasAorB) ||
((leftHasAorB || rightHasAorB) && (root == A || root == B)))
*p = root;
if (leftHasAorB || rightHasAorB)
return true;
if (root == A || root == B)
return true;
return false;
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯