绿色网站建设背景的原因,网页设计专业,iapp做网站,17做网站骗子给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为#xff1a;“对于有根树 T 的两个节点 p、q#xff0c;最近公共祖先表示为一个节点 x#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大#xff08;一个节点也可以是它自己的祖…给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为“对于有根树 T 的两个节点 p、q最近公共祖先表示为一个节点 x满足 x 是 p、q 的祖先且 x 的深度尽可能大一个节点也可以是它自己的祖先。” 示例 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 。因为根据定义最近公共祖先节点可以为节点本身。示例 3输入root [1,2], p 1, q 2输出1 提示1、树中节点数目在范围 [2, 105] 内。2、-109 Node.val 1093、所有 Node.val 互不相同 。4、p ! q5、p 和 q 均存在于给定的二叉树中。思路本题使用递归判断当前结点的左右树是否同时包含pq若左树同时包含pq左树的左树不同时包含那么当前节点的左节点就是最近的公共祖先代码class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {if(rootnull){return null;}if(rootp||rootq){return root;}TreeNode leftTreelowestCommonAncestor(root.left,p,q);TreeNode rightTreelowestCommonAncestor(root.right,p,q);if(leftTree!nullrightTree!null){return root;}if(leftTree!null){return leftTree;}if(rightTree!null){return rightTree;}return null;}
}