leetcode617. 合并二叉树(java)

问题描述:

给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。

你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。

示例:

输入: 
	Tree 1                     Tree 2                  
          1                         2                             
         / \                       / \                            
        3   2                     1   3                        
       /                           \   \                      
      5                             4   7                  
输出: 
合并后的树:
	     3
	    / \
	   4   5
	  / \   \ 
	 5   4   7

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/merge-two-binary-trees
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

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

上代码,拿去即可运行:

package com.onlyqi.upup01.tree;





public class Node {
    public Integer val;
    public Node nodeLeft;
    public Node nodeRight;

    public Node() {
    }

    public Node(Integer val, Node nodeLeft, Node nodeRight) {
        this.val = val;
        this.nodeLeft = nodeLeft;
        this.nodeRight = nodeRight;
    }
    public Node(Integer val) {
        this.val = val;
    }
    public Integer getVal() {
        return val;
    }

    public void setVal(Integer val) {
        this.val = val;
    }

    public Node getNodeLeft() {
        return nodeLeft;
    }

    public void setNodeLeft(Node nodeLeft) {
        this.nodeLeft = nodeLeft;
    }

    public Node getNodeRight() {
        return nodeRight;
    }

    public void setNodeRight(Node nodeRight) {
        this.nodeRight = nodeRight;
    }
}
package com.onlyqi.upup01.tree;

public class Test05 {
    public static void main(String[] args) {
        Node node1 = new Node(1);
        Node node2 = new Node(2);
        Node node3 = new Node(3);
        Node node4 = new Node(4);
        Node node5 = new Node(5);
        node3.setNodeLeft(node5);
        node1.setNodeLeft(node3);
        node1.setNodeRight(node2);

        Node tree1 = new Node(1);
        Node tree2 = new Node(2);
        Node tree3 = new Node(3);
        Node tree4 = new Node(4);
        Node tree7 = new Node(7);
        tree1.setNodeRight(tree4);
        tree3.setNodeRight(tree7);
        tree2.setNodeLeft(tree1);
        tree2.setNodeRight(tree3);

        Node node= mergeTrees(node1,tree2);

        PreOrderTraversal(node);
    }

    public static Node mergeTrees(Node t1, Node t2) {
        if(t1==null && t2==null){
            return null;
        }
        int x=t1==null?0:t1.val;
        int y=t2==null?0:t2.val;
        Node root=new Node(x+y);
        root.setNodeLeft(mergeTrees(t1==null?null:t1.getNodeLeft(),t2==null?null:t2.getNodeLeft()));
        root.setNodeRight(mergeTrees(t1==null?null:t1.getNodeRight(),t2==null?null:t2.getNodeRight()));
        return root;
    }

    /*************先序遍历****************/
    static void PreOrderTraversal(Node node) {
        if (node != null) {
            System.out.println(node.getVal()); // 打印根
            PreOrderTraversal(node.getNodeLeft());  // 进入左子树
            PreOrderTraversal(node.getNodeRight());  // 进入右子树
        }
    }

}

运行结果:

我要刷100道算法题,第86道  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

only-qi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值