2020-05-27学习随笔

序言

学习随笔是本人对自己一天的自学回顾,由于本人是非科班出身,不懂很多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.其他解法

栈+迭代

我连递归都不太熟,还是先放一放吧。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。