题解 | #农场牛群族谱#
农场牛群族谱
https://www.nowcoder.com/practice/7d28855a76784927b956baebeda31dc8
import java.util.*; /* * public class TreeNode { * int val = 0; * TreeNode left = null; * TreeNode right = null; * public TreeNode(int val) { * this.val = val; * } * } */ public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param root TreeNode类 * @param p int整型 * @param q int整型 * @return int整型 */ public int lowestCommonAncestor (TreeNode root, int p, int q) { // write code here TreeNode helper = lowest(root, p, q); return helper.val; } public TreeNode lowest(TreeNode root, int p, int q) { if (root == null || root.val == p || root.val == q) { return root; } TreeNode left = lowest(root.left, p, q); TreeNode right = lowest(root.right, p, q); if (left != null && right == null) { return left; } if (right != null && left == null) { return right; } if (right == null && left == null) { return null; } else return root; } }
本题知识点分析:
二叉树(Binary Tree)以及递归算法
本题解题思路:
- 定义了一个名为
lowestCommonAncestor
的方法,该方法接收一个名为root
的TreeNode
类型参数,以及两个整型参数p
和q
,并返回一个整型结果。 - 在
lowestCommonAncestor
方法中,首先检查root
是否为null
,如果是,则返回 -1。 - 然后检查当前节点的值是否等于
p
或q
,如果是,则当前节点即为所求的最低共同祖先节点,直接返回节点的值。 - 如果当前节点不是最低共同祖先节点,则从左右子树中递归调用
lowestCommonAncestor
方法分别找到p
和q
的最低共同祖先节点。 - 如果左右子树的结果都不为 -1,则说明
p
和q
分别位于当前节点的左右子树中,当前节点即为最低共同祖先节点,返回当前节点的值。