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

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

题目链接:点击打开链接

题目大意:

解题思路:

相关企业

  • 字节跳动
  • Facebook
  • 亚马逊(Amazon)
  • 谷歌(Google)
  • 微软(Microsoft)
  • 腾讯(Tenent)
  • 快手
  • 小米集团
  • 苹果(Apple)
  • 领英(LinkedIn)

AC 代码

  • Java
/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode(int x) { val = x; }* }*/// 解决方案(1)classSolution {
Stack<TreeNode>pStack=newStack<>(), qStack=newStack<>();
Map<TreeNode, Integer>pMap=newHashMap<>(), qMap=newHashMap<>();
publicTreeNodelowestCommonAncestor(TreeNoderoot, TreeNodep, TreeNodeq) {
dfs(root, p.val, pStack, pMap, 0);
dfs(root, q.val, qStack, qMap, 0);
TreeNoderes=common();
returnres;
    }
TreeNodecommon() {
TreeNoderes;
while (!pStack.isEmpty() &&!qStack.isEmpty()) {
TreeNodepe=pStack.peek();
TreeNodeqe=qStack.peek();
if (pe.val==qe.val) {
res=pStack.peek();
pStack.pop();
qStack.pop();
returnres;
            }
if (pMap.get(pe) >qMap.get(qe)) {
pStack.pop();
            } elseif (pMap.get(pe) <qMap.get(qe)) {
qStack.pop();
            } else {
pStack.pop();
qStack.pop();
            }
        }
returnnull;
    }
voiddfs(TreeNodenode, intval, Stack<TreeNode>stack, Map<TreeNode, Integer>map, intl) {
if (node==null) {
return;
        }
if (node.val==val) {
stack.push(node);
map.put(node, l);
        } elseif (node.val>val) {
stack.push(node);
map.put(node, l);
dfs(node.left, val, stack, map, l+1);
        } else {
stack.push(node);
map.put(node, l);
dfs(node.right, val, stack, map, l+1);
        }
    }
}
// 解决方案(2)classSolution {
publicTreeNodelowestCommonAncestor(TreeNoderoot, TreeNodep, TreeNodeq) {
if(p.val>q.val) { // 保证 p.val < q.valTreeNodetmp=p;
p=q;
q=tmp;
        }
while(root!=null) {
if(root.val<p.val) // p,q 都在 root 的右子树中root=root.right; // 遍历至右子节点elseif(root.val>q.val) // p,q 都在 root 的左子树中root=root.left; // 遍历至左子节点elsebreak;
        }
returnroot;
    }
}
// 解决方案(3)classSolution {
publicTreeNodelowestCommonAncestor(TreeNoderoot, TreeNodep, TreeNodeq) {
if(root.val<p.val&&root.val<q.val)
returnlowestCommonAncestor(root.right, p, q);
if(root.val>p.val&&root.val>q.val)
returnlowestCommonAncestor(root.left, p, q);
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) {}* };*/// 解决方案(1)classSolution {
public:
TreeNode*lowestCommonAncestor(TreeNode*root, TreeNode*p, TreeNode*q) {
if(p->val>q->val)
swap(p, q);
while(root!=nullptr) {
if(root->val<p->val) // p,q 都在 root 的右子树中root=root->right; // 遍历至右子节点elseif(root->val>q->val) // p,q 都在 root 的左子树中root=root->left; // 遍历至左子节点elsebreak;
        }
returnroot;
    }
};
// 解决方案(2)classSolution {
public:
TreeNode*lowestCommonAncestor(TreeNode*root, TreeNode*p, TreeNode*q) {
if(root->val<p->val&&root->val<q->val)
returnlowestCommonAncestor(root->right, p, q);
if(root->val>p->val&&root->val>q->val)
returnlowestCommonAncestor(root->left, p, q);
returnroot;
    }
};
目录
打赏
0
0
0
0
37
分享
相关文章
|
3天前
|
Go
【LeetCode 热题100】路径与祖先:二叉树中的深度追踪技巧(力扣437 / 236 )(Go语言版)
本文深入探讨二叉树中路径与祖先问题,涵盖两道经典题目:LeetCode 437(路径总和 III)和236(最近公共祖先)。对于路径总和 III,文章分析了双递归暴力解法与前缀和优化方法,后者通过哈希表记录路径和,将时间复杂度从O(n²)降至O(n)。在最近公共祖先问题中,采用后序遍历递归查找,利用“自底向上”的思路确定最近公共祖先节点。文中详细解析代码实现与核心要点,帮助读者掌握深度追踪技巧,理解树结构中路径与节点关系的本质。这类问题在面试中高频出现,掌握其解法意义重大。
23 4
基于 PHP 二叉搜索树算法的内网行为管理机制探究
在当今数字化网络环境中,内网行为管理对于企业网络安全及高效运营具有至关重要的意义。它涵盖对企业内部网络中各类行为的监测、分析与管控。在内网行为管理技术体系里,算法与数据结构扮演着核心角色。本文将深入探究 PHP 语言中的二叉搜索树算法于内网行为管理中的应用。
32 4
|
1月前
|
算法系列之数据结构-二叉搜索树
二叉查找树(Binary Search Tree,简称BST)是一种常用的数据结构,它能够高效地进行查找、插入和删除操作。二叉查找树的特点是,对于树中的每个节点,其左子树中的所有节点都小于该节点,而右子树中的所有节点都大于该节点。
82 22
关于公司电脑桌面监控中 PHP 二叉搜索树算法的深度剖析
在现代企业管理中,公司电脑桌面监控系统通过二叉搜索树(BST)算法保障信息安全和提高效率。本文探讨PHP中的BST在监控场景的应用,包括节点定义、插入与查找操作,并展示如何管理时间戳数据,以快速查询特定时间段内的操作记录。BST的高效性使其成为处理复杂监控数据的理想选择。
31 2
解锁文件共享软件背后基于 Python 的二叉搜索树算法密码
文件共享软件在数字化时代扮演着连接全球用户、促进知识与数据交流的重要角色。二叉搜索树作为一种高效的数据结构,通过有序存储和快速检索文件,极大提升了文件共享平台的性能。它依据文件名或时间戳等关键属性排序,支持高效插入、删除和查找操作,显著优化用户体验。本文还展示了用Python实现的简单二叉搜索树代码,帮助理解其工作原理,并展望了该算法在分布式计算和机器学习领域的未来应用前景。
解锁“分享文件”高效密码:探秘 Java 二叉搜索树算法
在信息爆炸的时代,文件分享至关重要。二叉搜索树(BST)以其高效的查找性能,为文件分享优化提供了新路径。本文聚焦Java环境下BST的应用,介绍其基础结构、实现示例及进阶优化。BST通过有序节点快速定位文件,结合自平衡树、多线程和权限管理,大幅提升文件分享效率与安全性。代码示例展示了文件插入与查找的基本操作,适用于大规模并发场景,确保分享过程流畅高效。掌握BST算法,助力文件分享创新发展。
U 盘管控情境下 Python 二叉搜索树算法的深度剖析与探究
在信息技术高度发达的今天,数据安全至关重要。U盘作为常用的数据存储与传输工具,其管控尤为关键。本文探讨Python中的二叉搜索树算法在U盘管控中的应用,通过高效管理授权U盘信息,防止数据泄露,保障信息安全。二叉搜索树具有快速插入和查找的优势,适用于大量授权U盘的管理。尽管存在一些局限性,如树结构退化问题,但通过优化和改进,如采用自平衡树,可以有效提升U盘管控系统的性能和安全性。
45 3
leetcode算法题-有效的括号(简单)
【11月更文挑战第5天】本文介绍了 LeetCode 上“有效的括号”这道题的解法。题目要求判断一个只包含括号字符的字符串是否有效。有效字符串需满足左括号必须用相同类型的右括号闭合,并且左括号必须以正确的顺序闭合。解题思路是使用栈数据结构,遍历字符串时将左括号压入栈中,遇到右括号时检查栈顶元素是否匹配。最后根据栈是否为空来判断字符串中的括号是否有效。示例代码包括 Python 和 Java 版本。
|
6月前
|
每日一道算法题(Leetcode 20)
每日一道算法题(Leetcode 20)
62 2
|
6月前
【LeetCode 48】108.将有序数组转换为二叉搜索树
【LeetCode 48】108.将有序数组转换为二叉搜索树
68 0

热门文章

最新文章