LeetCode(算法)- 236. 二叉树的最近公共祖先

简介: LeetCode(算法)- 236. 二叉树的最近公共祖先

题目链接:点击打开链接

题目大意:

解题思路:

相关企业

  • 字节跳动
  • Facebook
  • 亚马逊(Amazon)
  • 谷歌(Google)
  • 微软(Microsoft)
  • 苹果(Apple)
  • 领英(LinkedIn)
  • PayPal

AC 代码

  • Java
/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode(int x) { val = x; }* }*/// 解决方案(1)classSolution {
Queue<TreeNode>pQue=newLinkedList<>(), qQue=newLinkedList<>();
Map<TreeNode, Integer>pMap=newHashMap<>(), qMap=newHashMap<>();
publicTreeNodelowestCommonAncestor(TreeNoderoot, TreeNodep, TreeNodeq) {
dfs(root, p.val, pQue, pMap, 0);
dfs(root, q.val, qQue, qMap, 0);
TreeNoderes=common();
returnres;
    }
TreeNodecommon() {
TreeNoderes;
while (!pQue.isEmpty() &&!qQue.isEmpty()) {
TreeNodepe=pQue.peek();
TreeNodeqe=qQue.peek();
if (pe.val==qe.val) {
res=pQue.peek();
pQue.poll();
qQue.poll();
returnres;
            }
if (pMap.get(pe) >qMap.get(qe)) {
pQue.poll();
            } elseif (pMap.get(pe) <qMap.get(qe)) {
qQue.poll();
            } else {
pQue.poll();
qQue.poll();
            }
        }
returnnull;
    }
booleandfs(TreeNodenode, intval, Queue<TreeNode>queue, Map<TreeNode, Integer>map, intl) {
if (node==null) {
returnfalse;
        }
if (node.val==val) {
queue.offer(node);
map.put(node, l);
returntrue;
        }
booleanleft=dfs(node.left, val, queue, map, l+1);
if (left) {
queue.offer(node);
map.put(node, l);
returntrue;
        }
booleanright=dfs(node.right, val, queue, map, l+1);
if (right) {
queue.offer(node);
map.put(node, l);
returntrue;
        }
returnfalse;
    }
}
// 解决方案(2)classSolution {
publicTreeNodelowestCommonAncestor(TreeNoderoot, TreeNodep, TreeNodeq) {
if(root==null||root==p||root==q) returnroot;
TreeNodeleft=lowestCommonAncestor(root.left, p, q);
TreeNoderight=lowestCommonAncestor(root.right, p, q);
if(left==null) returnright;
if(right==null) returnleft;
returnroot;
    }
}
  • C++
/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/classSolution {
public:
TreeNode*lowestCommonAncestor(TreeNode*root, TreeNode*p, TreeNode*q) {
if(root==nullptr||root==p||root==q) returnroot;
TreeNode*left=lowestCommonAncestor(root->left, p, q);
TreeNode*right=lowestCommonAncestor(root->right, p, q);
if(left==nullptr) returnright;
if(right==nullptr) returnleft;
returnroot;
    }
};
目录
相关文章
|
1月前
|
算法
LeetCode[题解] 1261. 在受污染的二叉树中查找元素
LeetCode[题解] 1261. 在受污染的二叉树中查找元素
15 1
|
13天前
|
算法
【算法与数据结构】二叉树(前中后)序遍历2
【算法与数据结构】二叉树(前中后)序遍历
|
1月前
|
算法 Java
[Java·算法·中等] LeetCode15. 三数之和
[Java·算法·中等] LeetCode15. 三数之和
29 0
|
1天前
|
算法
【力扣】94. 二叉树的中序遍历、144. 二叉树的前序遍历、145. 二叉树的后序遍历
【力扣】94. 二叉树的中序遍历、144. 二叉树的前序遍历、145. 二叉树的后序遍历
|
9天前
|
算法 索引
【算法与数据结构】深入二叉树实现超详解(全源码优化)
【算法与数据结构】深入二叉树实现超详解(全源码优化)
|
9天前
|
存储 算法
【算法与数据结构】深入解析二叉树(二)之堆结构实现
【算法与数据结构】深入解析二叉树(二)之堆结构实现
|
1月前
leetcode热题100.二叉树中的最大路径和
leetcode热题100.二叉树中的最大路径和
17 0
|
1月前
leetcode热题100. 二叉树的最近公共祖先
leetcode热题100. 二叉树的最近公共祖先
18 0
|
1月前
|
算法 Java
[Java·算法·简单] LeetCode 28. 找出字符串中第一个匹配项的下标 详细解读
[Java·算法·简单] LeetCode 28. 找出字符串中第一个匹配项的下标 详细解读
18 0
|
19天前
|
机器学习/深度学习 算法
力扣刷题日常(一)
力扣刷题日常(一)
19 2