写在前面
最近想复习一下数据结构与算法相关的内容,找一些题来做一做。如有更好思路,欢迎指正。
目录
- 写在前面
- 一、场景描述
- 二、具体步骤
- 1.环境说明
- 2.代码
- 写在后面
一、场景描述
合并二叉树。将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是,如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。
示例 1:
输入:Tree 1 Tree 21 2/ \ / \3 2 1 3/ \ \5 4 7输出:
合并后的树:3/ \4 5/ \ \5 4 7
二、具体步骤
1.环境说明
名称 | 说明 |
---|---|
IntelliJ IDEA | 2019.2 |
2.代码
以下为Java版本实现:
public class Lc617_MergeTrees {public static void main(String[] args) {// t1TreeNode t1n5 = new TreeNode(5);TreeNode t1n2 = new TreeNode(2);TreeNode t1n3 = new TreeNode(3);t1n3.left = t1n5;TreeNode t1 = new TreeNode(1);t1.left = t1n3;t1.right = t1n2;// t2TreeNode t2n7 = new TreeNode(7);TreeNode t2n3 = new TreeNode(3);t2n3.right = t2n7;TreeNode t2n4 = new TreeNode(4);TreeNode t2n1 = new TreeNode(1);t2n1.right = t2n4;TreeNode t2 = new TreeNode(2);t2.left = t2n1;t2.right = t2n3;System.out.println(Helper.levelOrder(mergeTrees(t1, t2)));}/*** 思路:* 返回值是TreeNode* 合并2个二叉树, 将t2覆盖到t1上,直接返回t1** 递归 2 棵树,处理2个结点* 结束条件:至少一个为空,则用另一个结点来返回(覆盖),即 if t1 == null return t2, if t2 == null return t1** 否则2个节点都不为空,直接累加 t1.val += t2.val** 分别递归处理左子树和右子树* t1.left = (t1.left, t2.left)* t1.right = (t1.right, t2.right)** @param t1* @param t2* @return*/private static TreeNode mergeTrees(TreeNode t1, TreeNode t2) {// 为空覆盖操作if (t1 == null) {return t2;}if (t2 == null) {return t1;}t1.val += t2.val;// 递归处理左右子树t1.left = mergeTrees(t1.left, t2.left);t1.right = mergeTrees(t1.right, t2.right);return t1;}static class Helper {private static List<List<Integer>> levelOrder(TreeNode root) {List<List<Integer>> result = new ArrayList<>();if (root == null) {return result;}// LinkedList也是一个队列Queue<TreeNode> queue = new LinkedList<>();queue.offer(root);while (!queue.isEmpty()) {// size控制一层结点的个数int size = queue.size();List<Integer> list = new ArrayList<>();while (size-- > 0) {TreeNode node = queue.poll();list.add(node.val);if (node.left != null) {queue.offer(node.left);}if (node.right != null) {queue.offer(node.right);}}result.add(list);}return result;}}static class TreeNode {int val;TreeNode left;TreeNode right;public TreeNode(int val) {this.val = val;}}
}
写在后面
如果本文内容对您有价值或者有启发的话,欢迎点赞、关注、评论和转发。您的反馈和陪伴将促进我们共同进步和成长。