2022-4-9 高频面试题
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”
1 /** 2 * Definition for a binary tree node. 3 * public class TreeNode { 4 * int val; 5 * TreeNode left; 6 * TreeNode right; 7 * TreeNode(int x) { val = x; } 8 * } 9 */ 10 class Solution { 11 public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { 12 TreeNode temp=root,ans=root; 13 while (temp!=p) { 14 if (dfs(temp.left,p)) { 15 temp=temp.left; 16 }else { 17 temp=temp.right; 18 } 19 if (dfs(temp,q)) ans=temp; 20 } 21 22 return ans; 23 } 24 25 public boolean dfs(TreeNode root,TreeNode t){ 26 if (root==null) return false; 27 if (root==t) return true; 28 return dfs(root.left,t)||dfs(root.right,t); 29 } 30 }
思路:递归,或者hash记录路径集合,再判断。