flag
随便弄弄简单的东西
题目介绍
给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。
你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/merge-two-binary-trees
思路
采取先序遍历二叉树的思想,分别将两个二叉树先序遍历,同时将各个节点的值合并。
关键代码
treeNode的定义:
public class TreeNode {
private int val;
private TreeNode left;
private TreeNode right;
public TreeNode(int x) {
val = x;
}
public TreeNode(){}
合并方法:
public static TreeNode mergeTrees(TreeNode t1, TreeNode t2) {
if(t1==null&&t2==null)
return null;
TreeNode result=new TreeNode();
if(t1!=null&&t2!=null){
result.setVal(t1.getVal()+t2.getVal());// 先合并根节点
// 再递归合并左右子树
result.setLeft(mergeTrees(t1.getLeft(),t2.getLeft()));
result.setRight(mergeTrees(t1.getRight(),t2.getRight()));
}
else if(t1==null&&t2!=null){
result.setVal(t2.getVal());
result.setLeft(mergeTrees(null,t2.getLeft()));
result.setRight(mergeTrees(null,t2.getRight()));
}
else if(t1!=null&&t2==null){
result.setVal(t1.getVal());
result.setLeft(mergeTrees(t1.getLeft(),null));
result.setRight(mergeTrees(t1.getRight(),null));
}
return result;
}
测试
TreeNode treeNode=mergeTrees(t1,t2);
System.out.println(treeNode.getVal());
System.out.println(treeNode.getLeft().getVal());
System.out.println(treeNode.getRight().getVal());
System.out.println(treeNode.getLeft().getLeft().getVal());
System.out.println(treeNode.getRight().getLeft().getVal());
结果: