使用深度优先
/**
* @author xnl
* @Description:
* @date: 2022/6/16 23:16
*/
public class Solution {
public static void main(String[] args) {
Solution solution = new Solution();
}
private TreeNode ans;
public Solution(){
ans = null;
}
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
this.dfs(root, p.val, q.val);
return ans;
}
/**
* 使用深度优先遍历,也就是使用递归
* 定义左右两个Boolean值,代表是否找到左右子树匹配的节点
* @param root
* @param p
* @param q
* @return
*/
private boolean dfs(TreeNode root, int p, int q){
if (root == null){
return false;
}
boolean lson = dfs(root.left, p , q);
boolean rson = dfs(root.right, p, q);
if ((lson && rson) || ((root.val == p || root.val == q) && (lson || rson))){
ans = root;
}
return lson || rson || (root.val == p || root.val == q);
}
}
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
该博客主要介绍了如何使用深度优先搜索(DFS)算法在二叉树中寻找两个指定节点的最近公共祖先。代码中定义了一个Solution类,包含一个loweestCommonAncestor方法,该方法通过递归遍历树的左右子节点,当找到匹配节点时更新最近公共祖先。此外,还定义了TreeNode类来表示树的节点。
312

被折叠的 条评论
为什么被折叠?



