Day102 | 灵神 | 二叉树 合并二叉树
Day102 | 灵神 | 二叉树 合并二叉树
617.合并二叉树
617. 合并二叉树 - 力扣(LeetCode)
思路:
就是新建一个结点,然后找到左右子树给接上去把该节点返回就是了
接子树的时候有下面几种情况
1.如果root1当前结点不为空,而root2为空的话,那就返回root1作为上层递归函数的结点t的左子树或者右子树
2.如果root2当前结点不为空,而root1为空的话,那就返回root2作为上层递归函数的结点t的左子树或者右子树
3.如果root1当前结点为空,而root2也为空的话,那就返回nullptr
4.如果root1当前结点不为空,而root2也不为空的话,那就把这两个结点的val相加作为当前结点t的val然后返回即可
完整代码:
class Solution {
public:TreeNode* tra(TreeNode *t1,TreeNode *t2,TreeNode *t){if(t==nullptr)t=new TreeNode;if(t1==nullptr&&t2!=nullptr)return t2;else if(t1!=nullptr&&t2==nullptr)return t1;else if(t1==nullptr&&t2==nullptr)return nullptr;else t->val=t1->val+t2->val;/*这样写也行if(t1==nullptr)return t2;else if(t2==nullptr)return t1;else t->val=t1->val+t2->val;*/t->left=tra(t1->left,t2->left,t->left);t->right=tra(t1->right,t2->right,t->right);return t;}TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {TreeNode *res=new TreeNode;return tra(root1,root2,res);}
};
灵神代码:
class Solution {
public:TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {if (root1 == nullptr) return root2;if (root2 == nullptr) return root1;return new TreeNode(root1->val + root2->val,mergeTrees(root1->left, root2->left), // 合并左子树mergeTrees(root1->right, root2->right)); // 合并右子树}
};