wordpress源码整站,wordpress忘记后台账号,物联网应用技术就业方向,做网站百度排前位题目 
LCR 194. 二叉树的最近公共祖先 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 例如#xff0c;给定如下二叉树: 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 的最…题目 
LCR 194. 二叉树的最近公共祖先 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 例如给定如下二叉树: 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 题相同LeetCode - Lowest Common Ancestor of a Binary Tree 解法 
这题与 LCR193 的不同之处在于其不是二叉搜索树故不能简单地用节点的大小值比较来找到目标节点进而找到最近公共祖先对可能的公共祖先进行分析p/q可能就是最近的公共祖先如下图1 和 3 最近的公共祖先就是1 公共祖先也可能是根如下图目标节点 2 和 3 分布在 1 两侧最近公共祖先就是 1 进行前序遍历从顶至下当找到第一个目标节点时就返回由于是从顶往下找第二个目标节点可能在第一个目标节点的下面也可能在第一个目标节点的异侧找到了第一个目标节点后立刻返回然后在目标节点的根的另一侧寻找第二个目标节点如果找不到则说明第二个目标节点和第一个目标节点在同一个子树上所以最近公共祖先就是第一个目标节点。比如下图目标节点为2、4找到 2 后立刻返回在 2 的根 1 的另一边子树寻找 4发现没有找到则 4 一定在 2 这边的子树所以 2 就是最近的公共祖先 如果找到第一个目标节点后在第一个目标节点的根的另一边可以找到第二个目标节点则目标节点分布在根的两侧此时由先序遍历可知根就是最近的公共祖先。比如下图当找到第一个目标节点 2 之后在 2 的根 1 的另一边找第二个节点 4发现可以找到则目标节点 2 和 4 分布在根 1 的两侧所以根 1 就是最近的公共祖先  作者Krahets 链接https://leetcode.cn/leetbook/read/illustration-of-algorithm/lh5kuh/ 来源力扣LeetCode 
class Solution {
public:
//递归返回值空节点/最近公共祖先节点可能是自身也可能是上一个节点
//递归工作在当前节点的左右子树中寻找目标节点
//递归结束条件越过子节点/找到了目标节点TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {if(!root || rootp || rootq) return root;TreeNode *left  lowestCommonAncestor(root-left, p, q);TreeNode *right  lowestCommonAncestor(root-right, p, q);if(!left) return right;if(!right) return left;return root;}
};