单值二叉树

@单值二叉树

题目描述

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

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

图示

在这里插入图片描述
在这里插入图片描述
额外要求:
1、给定树的节点数范围是 [1, 100]。
2、每个节点的值都是整数,范围为 [0, 99] 。

思路分析

若A == B,B == C,则可以得出,A == C

  • 利用传递性,我们可以的出,如果父节点和子节点相同,然后子节点又和他的子节点相同,就可以得出,从父节点到最后一个字节点都是相同的
  • 空树不影响单值二叉树
  • 可以由上思路,进行递归,根节点与左右子树分别对比,利用 &&,只要有一个不相同就返回false,不然就返回true

样例代码

bool isUnivalTree(TreeNode* root)
    {
        //空树不影响结果
        if(root == NULL)
        {
            return true;
        }

//在查看左右孩子节点的值的时候,有可能会出现左节点或者右节点不存在
//不处理的话会导致对NULL的访问
//因为空节点不影响整棵树,所以赋值方面可以赋值为父节点的值
        int left_val = 0;
        int right_val = 0;

        if(root->left)
        {
            left_val = root->left->val;
        }
        else
        {
            left_val = root->val;
        }
        
        if(root->right)
        {
            right_val = root->right->val;
        }
        else
        {
            right_val = root->val;
        }

        if(root->val == left_val && root->val == right_val)
        {
            return isUnivalTree(root->left) && isUnivalTree(root->right);
        }
        else
        {
            return false;
        }
        
    }

总结

本文简单介绍了单值二叉树的解题思路,在力扣以及牛客网中还会有很多类似的题目,今后将会持续更新,敬请关注!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值