[LeetCode笔记]965. 单值二叉树

/*965. 单值二叉树

如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。只有给定的树是单值二叉树时,才返回 true;否则返回 false。

示例 1:

输入:[1,1,1,1,1,null,1]

输出:true

示例 2:

输入:[2,2,2,5,2]

输出:false

提示:

给定树的节点数范围是 [1, 100]。

每个节点的值都是整数,范围为 [0, 99] 。

*/

/**

* Definition for a binary tree node.

* struct TreeNode {

* int val;

* TreeNode *left;

* TreeNode *right;

* TreeNode() : val(0), left(nullptr), right(nullptr) {}

* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}

* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}

* };

*/

本问题可采用深度优先搜索,判断当前节点与每一个子节点的关系是否满足要求,以左子节点为例,如果其不为空且其值与母节点值相等,则继续向下搜索该左子节点。此处要保证递归搜索时该搜索结果能够返回。如果值不相等则直接返回false.右子节点同理。


class Solution {
    //本问题可采用深度优先搜索,判断当前节点与每一个子节点的关系是否满足要求,以左子节点为例,如果其不为空且其值与母节点值相等,则继续向下搜索该左子节点。此处要保证递归搜索时该搜索结果能够返回。如果值不相等则直接返回false.右子节点同理。
    bool equal(TreeNode* root){
        if(root->left!=nullptr){
            if(root->val!=root->left->val)
                return false;
            else
                if(!equal(root->left))//关键点,只有在左子节点返回值为空时使得当前节点返回false,不为空时不返回值。
                return false;
        }
          if(root->right!=nullptr){//关键点,对右子节点同理操作,避免遗漏。
            if(root->val!=root->right->val)
                return false;
            else
                if(!equal(root->right))
                return false;
        }
        return true;//关键点,只有在左方的子节点以及右方的所有节点都检索后,无不同时返回true
    }
public:
    bool isUnivalTree(TreeNode* root) {
        bool univalflag=equal(root);
        return univalflag;

    }
};

你可能感兴趣的:(LeetCode笔记,leetcode,算法)