小学的都能看懂的题解 | #合并二叉树#
合并二叉树
https://www.nowcoder.com/practice/7298353c24cc42e3bd5f0e0bd3d1d759
故事背景
想象你有两个花园,每个花园里有一些花盆,每个花盆里种了一株植物。现在,我们要把这两个花园合并成一个大花园。如果两个花园在同一个位置都有植物,我们就把这两株植物的叶子数加起来,作为新花园中那株植物的叶子数。如果没有植物的地方,我们就把另一个花园里的植物搬过来。
我们的树
我们的树就像花园里的植物,每个节点代表一株植物,节点的值代表叶子的数量。例如:
Tree 1 Tree 2 1 2 / \ / \ 3 2 1 3 / 对应到 / \ 5 新花园 4 7
我们的目标
我们的目标是把这两个花园合并成一个新的大花园,使得每个位置的植物叶子数是原来两个花园中对应位置植物叶子数的总和。如果只有一个花园有植物,就直接把那株植物搬到新花园。
如何实现
让我们用一个故事来说明这个过程:
- 检查两个花园是否有植物:
- 如果一个花园没有植物(节点为null),就把另一个花园的植物搬过来。
- 如果两个花园都有植物,就计算叶子数的总和。
- 处理植物的左右两侧:
- 对于每株植物,我们都要看看它的左右两侧有没有植物。
- 左侧和右侧也要按照同样的方式合并。
代码解释
让我们看看具体的代码实现:
class TreeNode { int val; TreeNode left, right; TreeNode(int x) { val = x; } } public class GardenMerger { // 合并两个花园的方法 public TreeNode mergeGardens(TreeNode garden1, TreeNode garden2) { if (garden1 == null) { return garden2; } if (garden2 == null) { return garden1; } // 如果两个花园都有植物,计算叶子数的总和 garden1.val += garden2.val; // 处理植物的左侧 garden1.left = mergeGardens(garden1.left, garden2.left); // 处理植物的右侧 garden1.right = mergeGardens(garden1.right, garden2.right); return garden1; } }
具体的解释
- 检查是否有植物:
- 如果一个花园没有植物,就把另一个花园的植物搬过来。
- 计算叶子数的总和:
- 如果两个花园都有植物,计算叶子数的总和。
- 处理左侧和右侧:
- 对于每株植物,我们都要看看它的左右两侧有没有植物,然后按照同样的方式合并。
如果这篇文章对你有帮助,请点个免费的赞👍,让它能够帮助更多的人。
#牛客创作赏金赛#小学生都能看懂的算法 文章被收录于专栏
主要面向小白的算法文章。以小学生都能看懂为目标而编写,顺便巩固下自己。