美文网首页
最近公共节点

最近公共节点

作者: couriravant | 来源:发表于2023-04-17 03:28 被阅读0次

题目2:二叉树的最近公共祖先
给定一个二叉树,找到该树中两个指定节点的最近公共祖先。

例如,给定如下二叉树:

  3
 / \
5   1

/ \ /
6 2 0 8
/
7 4
示例 1:

输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1
输出: 3
解释: 节点 5 和节点 1 的最近公共祖先是节点 3。
示例 2:

输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4
输出: 5
解释: 节点 5 和节点 4 的最近公共祖先是节点 5。
因为根据定义最近公共祖先节点可以为节点本身。

public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
    // 如果根节点为空或者根节点就是p或q,直接返回根节点
    if (root == null || root == p || root == q) return root;

    // 在左子树中查找p和q
    TreeNode left = lowestCommonAncestor(root.left, p, q);
    // 在右子树中查找p和q
    TreeNode right = lowestCommonAncestor(root.right, p, q);

    // 如果左子树和右子树都找到了p和q,那么最近公共祖先就是该节点
    if (left != null && right != null) return root;

    // 如果只在左子树中找到了p和q,那么最近公共祖先在左子树中
    if (left != null) return left;

    // 如果只在右子树中找到了p和q,那么最近公共祖先在右子树中
    return right;
}
#中序遍历

class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> result = new ArrayList<>(); // 存储结果的列表
if (root == null) {
return result; // 如果根节点为空,直接返回结果列表
}
result.addAll(inorderTraversal(root.left)); // 递归遍历左子树,并将结果加入结果列表
result.add(root.val); // 将当前节点的值加入结果列表
result.addAll(inorderTraversal(root.right)); // 递归遍历右子树,并将结果加入结果列表
return result; // 返回结果列表
}
}

#二叉树对称

class Solution {
public boolean isSymmetric(TreeNode root) {
if (root == null) {
return true;
}
return isSymmetricHelper(root.left, root.right);
}

private boolean isSymmetricHelper(TreeNode left, TreeNode right) {
    if (left == null && right == null) {
        return true;
    }
    if (left == null || right == null || left.val != right.val) {
        return false;
    }
    return isSymmetricHelper(left.left, right.right) && isSymmetricHelper(left.right, right.left);
}

}

相关文章

  • 最近公共父节点

    1,排序二叉树 p<最近父节点

  • 最近公共祖先系列

    最近公共祖先I 描述: 给定一棵二叉树,找到两个节点的最近公共父节点 (LCA)。最近公共祖先是两个节点的公共的祖...

  • lintcode 最近公共祖先

    给定一棵二叉树,找到两个节点的最近公共父节点(LCA)。最近公共祖先是两个节点的公共的祖先节点且具有最大深度。样例...

  • LCA_最近公共祖先

    LCA 最近公共祖先在一棵没有环的树上,每个节点肯定有其父亲节点和祖先节点,而最近公共祖先,就是两个节点在这棵树上...

  • 二叉树-最近的公共祖先

    已知二叉树,求二叉树中给定的两个节点的最近公共祖先。 最近公共祖先: 两节点v与w的最近公共祖先u,满足在树上最低...

  • 2020-04-02

    最近公共父节点(两个节点,都可能为null,都可能不在树上。)

  • 小米-基础算法-最近公共祖先

    给一棵二叉树和二叉树中的两个节点,找到这两个节点的最近公共祖先LCA。两个节点的最近公共祖先,是指两个节点的所有父...

  • 算法—— 最近公共祖先 III

    给一棵二叉树和二叉树中的两个节点,找到这两个节点的最近公共祖先LCA。两个节点的最近公共祖先,是指两个节点的所有父...

  • LCA(最近公共祖先)算法

    在一棵没有环的树上,每个节点肯定有其父亲节点和祖先节点,而最近公共祖先,就是两个节点在这棵树上深度最大的公共的祖先...

  • 最近公共祖先(LCA-tarjan/RMQ/倍增)

    在一棵没有环的树上,每个节点肯定有其父亲节点和祖先节点,而最近公共祖先,就是两个节点在这棵树上深度最大的公共的祖先...

网友评论

      本文标题:最近公共节点

      本文链接:https://www.haomeiwen.com/subject/lrwqjdtx.html