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记录路径集合,再判断。

posted on 2022-04-09 13:56  阿ming  阅读(21)  评论(0编辑  收藏  举报

导航