[二叉树]面试题 04.08. 首个共同祖先(medium)

编程入门 行业动态 更新时间:2024-10-27 03:42:06

[二叉树]面试题 04.08. <a href=https://www.elefans.com/category/jswz/34/1769465.html style=首个共同祖先(medium)"/>

[二叉树]面试题 04.08. 首个共同祖先(medium)

题目:

题解:

  • 递归三部曲,写好递归出口,递归式和处理递归结果便可得解。
  • 首个公共祖先有三种情况:
  • 1)p、q为以 root 为根节点的左右子树中,则 root 为祖先
  • 2)p、q在以 root 为节点的左子树中,则 root->left 为祖先(即在右子树中找不到p、q节点)
  • 3)p、q在以 root 为节点的右子树中,则 root->right为祖先(即在左子树中找不到p、q节点)

代码如下:

class Solution {
public:TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {//1、递归出口:根节点为空,或者找到p或q节点了if(!root||root==p||root==q)return root;//2、递归式:从根节点的左右子树寻找p、q的节点TreeNode *left=lowestCommonAncestor(root->left,p,q);TreeNode *right=lowestCommonAncestor(root->right,p,q);//3、判断其祖先的位置if(left&&right)return root;//在以root为根节点的左右子树中找到p、q节点了,则root为祖先if(left&&!right)return left;//在以root为根节点的右子树没找到p、q节点,则其左子树根节点为祖先return right;在以root为根节点的左子树没找到p、q节点,则其右子树根节点为祖先}
};

更多推荐

[二叉树]面试题 04.08. 首个共同祖先(medium)

本文发布于:2023-07-28 18:55:14,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1280254.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:首个   祖先   面试题   二叉树   medium

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!