当前位置: 首页 > 后端技术 > Python

力扣-面试题68-II,二叉树的最近共同祖先【剑指offer】【Python】

时间:2023-03-25 20:31:51 Python

题目Leetcode给定一棵二叉树,求树中两个指定节点的最近共同祖先。百度百科对最近共同祖先的定义是:“对于有根树T的两个节点p和q,最近共同祖先表示为节点x,满足x是p和q的祖先,深度为x尽可能大(一个节点也可以是它自己的祖先)。”例如,给定以下二叉树:root=[3,5,1,6,2,0,8,null,null,7,4]示例1:输入:root=[3,5,1,6,2,0,8,null,null,7,4],p=5,q=1输出:3解释:节点5和节点1最近的共同祖先是节点3。示例2:输入:root=[3,5,1,6,2,0,8,null,null,7,4],p=5,q=4输出:5解释:最近的节点5和节点4共同祖先是节点5。因为根据定义最近的共同祖先节点可以是节点本身。解释:所有节点的值都是唯一的。p和q是不同的节点,都存在于给定的二叉树中。注:本题与主站236题相同:https://leetcode-cn.com/probl...DFS后序遍历的思路分为四种情况:1.左边都和右子树为空:左右子树不包含p和q2。左子树为空:p,q不在左子树中3.右子树为空:p,q不在右子树中4.左右子树??都为空:p,q在左子树中和右子树,当前根是最近的公共祖先节点代码Python3#Definitionforabinarytreenode.#classTreeNode:#def__init__(self,x):#self.val=x#self.left=None#self.right=Noneclass解决方案:deflowestCommonAncestor(self,root:TreeNode,p:TreeNode,q:TreeNode)->TreeNode:如果不是root或root==p或root==q:返回rootleft=self.lowestCommonAncestor(root.left,p,q)right=self.lowestCommonAncestor(root.right,p,q)#左子树和右子树如果不是左子树和右子树是空的:returnNone#左子树是空的elifnotleftandright:returnright#right子树为空elifleftandnotright:returnleft#左右子树都不为空returnrootlinkgithub