美文网首页
二叉树的相关算法题

二叉树的相关算法题

作者: 盼旺 | 来源:发表于2023-04-26 16:16 被阅读0次

1.合并二叉树

给你两棵二叉树: root1 和 root2 。

想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为 null 的节点将直接作为新二叉树的节点。

返回合并后的二叉树。

注意: 合并过程必须从两个树的根节点开始。


把root2合并到root1

class Solution {
    public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {
        if ((root1 == null) && (root2 == null)) {
            return null;
        }

        if ((root1 != null) && (root2 == null)) {
            return root1;
        }

        if ((root1 == null) && (root2 != null)) {
            return root2;
        }

        if ((root1 != null) && (root2 != null)) {
            TreeNode t = new TreeNode();
            t.val = root1.val + root2.val;
            t.left = mergeTrees(root1.left, root2.left);
            t.right = mergeTrees(root1.right, root2.right);
            return t;
        }

        if (root2.left != null) {
            root1.left = mergeTrees(root1.left, root2.left);
        }

        if (root2.right != null) {
            root1.right = mergeTrees(root1.right, root2.right);
        }

        return root1;
    }
}

判断二叉树是否相等

给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。
如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。

class Solution {
    public boolean isSameTree(TreeNode p, TreeNode q) {
        if(p==q&&p==null){
            return true;
        }
        if(p==null||q==null){
            return false;
        }
        if(p.val!=q.val){
            return false;
        }
        return isSameTree(p.left,q.left)&&isSameTree(p.right,q.right);
    }
}

二叉树这两个节点的最近公共祖先

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

说明:
所有节点的值都是唯一的。
p、q 为不同节点且均存在于给定的二叉树中。

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

解析:
https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-tree/solution/236-er-cha-shu-de-zui-jin-gong-gong-zu-xian-hou-xu/

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
        if(root==null){
            return null;
        }
        if(root==p||root==q){
            return root;
        }
        TreeNode left = lowestCommonAncestor(root.left,p,q);
        TreeNode right = lowestCommonAncestor(root.right,p,q);
        if(left!=null&&right!=null){
            return root;
        }
        if(left==null){
            return right;
        }
         return left;
    
    }
}

对称的二叉树

请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。


示例 1:
输入:root = [1,2,2,3,4,4,3]
输出:true

示例 2:
输入:root = [1,2,2,null,3,null,3]
输出:false

巧妙的传入两个参数root

class Solution {
    public boolean isSymmetric(TreeNode root) {
        return isDuiCheng(root,root);
    }
    public boolean isDuiCheng(TreeNode q,TreeNode p) {
        if(q==null&&p==null){
            return true;
        }
        if(q==null||p==null){
            return false;
        }
        if(q.val!=p.val){
            return false;
        }
        return isDuiCheng(q.left,p.right)&&isDuiCheng(q.right,p.left);
    }
}

相关文章

网友评论

      本文标题:二叉树的相关算法题

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