2020-06-01学习随笔

序言

学习随笔是本人对自己一天的自学回顾,由于本人是非科班出身,不懂很多cs的专业术语,所以难免会有些错误,望各位批评指正,本人定当悉心接受并立即改正。希望自己能够慢慢坚持下去,坚持转行的道路,坚持每天学习的输出。

刷题篇

LeetCode

1.题目

如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。

只有给定的树是单值二叉树时,才返回 true;否则返回 false。

2.大致思路

递归

/*
怎么才是单值二叉树:所有结点的值相同

即可认为,根节点的值等于左子树的值也等于右子树的值

而左子树根节点的值又等于左孩子的值也等于右孩子的值(左右孩子不为空),递归入口出现了
*/

上面这个思路是在当时做题时直接写的。

总结一下就是:

判断是否为单值二叉树,看根结点的值和左右子树的值是否相等,而与此同时,左右子树也需要是单值二叉树。

所以要判断树是否为单值二叉树,先判断左右子树是否为单值二叉树,这就是递归入口。

3.代码

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */
bool isUnivalTree(struct TreeNode* root){
    if(root==NULL) return true;//空树为单值二叉树
    if(root->left==NULL&&root->right==NULL) return true;//只有根结点为单值二叉树
    if(root->left==NULL&&root->right!=NULL) //左孩子为空、右孩子不为空的情况
        if(root->val==root->right->val)
            return isUnivalTree(root->right);
    if(root->left!=NULL&&root->right==NULL)//右孩子为空、左孩子不为空的情况
        if(root->val==root->left->val)
            return isUnivalTree(root->left);
    if(root->left!=NULL&&root->right!=NULL){//左右均不为空的情况
        if(root->val==root->left->val&&root->val==root->right->val) {
            return isUnivalTree(root->left)&&isUnivalTree(root->right);
        }
    }
    return false; 
}

4.多说两句

这是我第一次,没有看评论或者题解,直接做对的题目(虽然其中有几次没有考虑好边界条件),真的很开心,我好像懂递归了,知道怎么找递归入口了。

多练习,多复习,多总结。

两年之后见分晓。

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