首页 > 其他分享 >LeetCode 236. 二叉树的最近公共祖先 - 回溯的理解

LeetCode 236. 二叉树的最近公共祖先 - 回溯的理解

时间:2022-11-01 11:25:19浏览次数:86  
标签:right return LeetCode 二叉树 TreeNode 236 root 节点 left

题目

https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-tree/

思路

自己做只摸到一些门道,还是靠随想录...
代码:

def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
	if not root or root == p or root == q:
		return root
	left = self.lowestCommonAncestor(root.left, p, q)
	right = self.lowestCommonAncestor(root.right, p, q)
	if left and right:
		return root
	if left:
		return left
	return right

说明
一开始我想用全局变量来标记深度最深的祖先节点,但是发现一个问题:无法隔层传递匹配p、q的子节点,遂失败
随想录的思路就是,后序遍历——即从叶子节点往上遍历
如果当前匹配pq 直接return。
这里有一个隐藏事实,pq一定能在左右子树找到!
故,一但找到匹配节点,可以不用管,直接返回
就算该节点下面还有个匹配点,但是此节点已经作为另一节点的祖先了
就算左边只有一个点,那另一个点一定在右子树,故我们必须遍历整棵树

随想录

https://gitee.com/programmercarl/leetcode-master/blob/master/problems/0236.二叉树的最近公共祖先.md#总结

标签:right,return,LeetCode,二叉树,TreeNode,236,root,节点,left
From: https://www.cnblogs.com/Linanjing/p/16847060.html

相关文章

  • LeetCode_144_二叉树的前序遍历
    题目描述:给定一个二叉树,返回它的前序遍历。示例:输入:[1,null,2,3]1\2/3输出:[1,2,3]进阶:递归算法很简单,你可以通过迭代算法完成吗?递归的写法......
  • LeetCode_572_另一个树的子树
    题目描述:给定两个非空二叉树s和t,检验s中是否包含和t具有相同结构和节点值的子树。s的一个子树包括s的一个节点和这个节点的所有子孙。s也可以看做它自身的一棵子......
  • 剑指offer——二叉树的深度
    题目描述:输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。思路1:按照深度优先遍历,设置一个全局变量ma......
  • LeetCode_617_合并二叉树
    题目描述:给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他......
  • LeetCode_637_二叉树的层平均值
    题目描述:给定一个非空二叉树,返回一个由每层节点平均值组成的数组.示例1:输入:3/\920/\157输出:[3,14.5,11]解释:第0层的平均值是3,第1层......
  • LeetCode_653_两数之和 IV - 输入 BST
    题目描述:给定一个二叉搜索树和一个目标结果,如果BST中存在两个元素且它们的和等于给定的目标结果,则返回true。案例1:输入:5/\36/\\247Target=......
  • LeetCode_16. 最接近的三数之和
    题目描述:给定一个包括n个整数的数组nums和一个目标值target。找出nums中的三个整数,使得它们的和与target最接近。返回这三个数的和。假定每组输入只存在唯一答案......
  • LeetCode_669_修剪二叉搜索树
    题目描述:给定一个二叉搜索树,同时给定最小边界L和最大边界R。通过修剪二叉搜索树,使得所有节点的值在[L,R]中(R>=L)。你可能需要改变树的根节点,所以结果应当返回修剪好的......
  • Leetcode第1662题:检查两个字符串数组是否相等(Check if two string arrays are equival
    解题思路输入是两个字符串数组,包含的元素数目不一定相同,每个元素包含的字符数目也不一定相同。使用两个指针p和i分别记录遍历的元素位置和字符位置。指针p1和p2分别表示......
  • 数据结构 玩转数据结构 5-2 测试自己的Leetcode链表代码
    0课程地址https://coding.imooc.com/lesson/207.html#mid=13434 1重点关注1.1leetCode的代码 如何本地调试详见3.1 1.2遗忘的......