序言
学习随笔是本人对自己一天的自学回顾,由于本人是非科班出身,不懂很多cs的专业术语,所以难免会有些错误,望各位批评指正,本人定当悉心接受并立即改正。希望自己能够慢慢坚持下去,坚持转行的道路,坚持每天学习的输出。
刷题篇
LeetCode
1.题目
给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。
你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点
2.大致思路
递归,这个我一来就想到了,但是下手万分艰难,本人对于递归有障碍。
利用前序遍历,若t1,t2不为空,则相加,若其中一个为空,则返回另一个。
3.代码
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
struct TreeNode* mergeTrees(struct TreeNode* t1, struct TreeNode* t2){
if(t1==NULL&&t2!=NULL) return t2;
if(t2==NULL&&t1!=NULL) return t1;
if(t1==NULL&&t2==NULL) return NULL;
if(t1!=NULL&&t2!=NULL){ //找好递归出口
t1->val+=t2->val;
t1->left=mergeTrees(t1->left,t2->left);//仔细理解这两步的递归操作
t1->right=mergeTrees(t1->right,t2->right);
}
return t1;
}
4.其他解法
栈+迭代
我连递归都不太熟,还是先放一放吧。