题目描述
- 貌似是面试高频题,显而易见的递归。

思路 & 代码
- 合并两棵树,先不考虑特殊情况,可以理解成:根结点合并,然后各自的左右子树继续进行合并操作。
- 那么递归返回值肯定是当前函数根结点
- 特殊情况:两棵树都为空、其中一颗为空。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {
// 返回空的情况
if(root1 == null && root2 == null){
return null;
}
// 返回另一条链表的情况
if(root1 == null || root2 == null){
return root2 == null ? root1 : root2;
}
// 继续合并的情况
root1.val += root2.val;
root1.left = mergeTrees(root1.left,root2.left);
root1.right = mergeTrees(root1.right,root2.right);
return root1;
}
}
更新版
- 感动,能感受到有点进步
class Solution {
public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {
if(root1 == null) {
return root2;
}
if(root2 == null) {
return root1;
}
root1.val += root2.val;
root1.left = mergeTrees(root1.left, root2.left);
root1.right = mergeTrees(root1.right, root2.right);
return root1;
}
}
版权声明:本文为qq_45108415原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。