剑指 Offer 68 - II. 二叉树的最近公共祖先

    科技2022-08-27  101

    剑指 Offer 68 - II. 二叉树的最近公共祖先

    题目

    给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。

    百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”

    解法

    class Solution { public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { if(root == null || p == root || q == root){ //若当前的节点是null,则返回当前节点 //若当前的节点是p或者q中的一个,则返回当前节点 return root; } //递归左子树 TreeNode left = lowestCommonAncestor(root.left,p,q); //递归右子树 TreeNode right = lowestCommonAncestor(root.right,p,q); //若左子树的返回值是null,说明公共父节点在右子树或者当前节点上 if(left == null) return right; //若友子树的返回值是null,说明公共父节点在左子树或者当前节点上 if(right == null) return left; //若左右子树的返回值都不是null,则表明p,q分别在左右子树上,当前节点才是公共父节点。 return root; } }
    Processed: 0.011, SQL: 9