[Swift]LeetCode236. 二叉树的最近公共祖先 | Lowest Common Ancestor of a Binary Tree
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:https://www.cnblogs.com/strengthen/p/10205089.html
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree.
According to the definition of LCA on Wikipedia: “The lowest common ancestor is defined between two nodes p and q as the lowest node in T that has both p and q as descendants (where we allow a node to be a descendant of itself).”
Given the following binary tree: root = [3,5,1,6,2,0,8,null,null,7,4]
Example 1:
5
1
3.
Example 2:
5
4
5
Note:
- All of the nodes' values will be unique.
- p and q are different and both values will exist in the binary tree.
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”
例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]
示例 1:
5
1
3。
示例 2:
5
4
5。
说明:
- 所有节点的值都是唯一的。
- p、q 为不同节点且均存在于给定的二叉树中。
递归
1 class Solution { 2 func lowestCommonAncestor(_ root: TreeNode?, _ p: TreeNode?,_ q: TreeNode?) -> TreeNode? { 3 if root!.val == nil || root!.equal(p) || root!.equal(q) 4 { 5 return root 6 } 7 8 var left:TreeNode? = lowestCommonAncestor(root!.left, p, q) 9 if left!.val != nil && left!.equal(p) && left!.equal(q) 10 { 11 return left 12 } 13 14 var right:TreeNode? = lowestCommonAncestor(root!.right, p , q) 15 if left!.val != nil && right!.val != nil 16 { 17 return root 18 } 19 return left!.val != nil ? left : right 20 } 21 } 22 public class TreeNode { 23 public var val: Int 24 public var left: TreeNode? 25 public var right: TreeNode? 26 public init(_ val: Int) { 27 self.val = val 28 self.left = nil 29 self.right = nil 30 } 31 32 func equal(_ root: TreeNode?)-> Bool 33 { 34 return (self.val == root!.val) && (self.left!.val == root!.left!.val) && (self.right!.val == root!.right!.val) 35 } 36 }
C++:4ms
1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x), left(NULL), right(NULL) {} 8 * }; 9 */ 10 static const auto _____ = []() 11 { 12 ios::sync_with_stdio(false); 13 cin.tie(nullptr); 14 return nullptr; 15 }(); 16 class Solution { 17 public: 18 TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) { 19 if (root == NULL || root == p || root == q) return root; 20 TreeNode* ptr1 = lowestCommonAncestor(root->left, p, q); 21 TreeNode* ptr2 = lowestCommonAncestor(root->right, p, q); 22 if (ptr1 && ptr2) return root; 23 return ptr1 ? ptr1 : ptr2; 24 } 25 };
C++:12ms
1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x), left(NULL), right(NULL) {} 8 * }; 9 */ 10 class Solution { 11 public: 12 TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) { 13 if(!root||p==root||q==root) return root; 14 TreeNode *left = lowestCommonAncestor(root->left, p, q); 15 TreeNode *right = lowestCommonAncestor(root->right, p, q); 16 if (left && right) return root; 17 return left ? left : right; 18 19 } 20 };
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了