当前位置:首页 > 力扣 > 力扣965题深度解析:单值二叉树的判断技巧

力扣965题深度解析:单值二叉树的判断技巧

11个月前 (05-31)


力扣965题深度解析:单值二叉树的判断技巧 二叉树 深搜 深度优先搜索 递归 分治算法 C++ 算法 第1张

重新解读题目 

判断一棵二叉树是否为“单值二叉”,即所有节点的值是否完全相同。题目看似简单,实则考验对树结构递归特性的理解。若一棵树的所有节点值相同,其必然满足:根节点与左右子树的值一致,且左右子树各自也为单值二叉树。这一特性,为递归解法提供了清晰的切入点。


解题思路与过程 

用递归分治策略,将大问题拆解为小问题:若一棵树是单值二叉树,其左右子树必须同样是单值二叉树,且所有子节点的值与根节点相等。

1. 边界条件:当树为空或仅含根节点时,直接返回true(空树视为单值,单个节点自然满足)。

2. 递归判定: 

        递归调用左、右子树,判断其是否为单值树(LAndR变量)。 

        若左右子树均合法,进一步检查根节点与左右子节点的值是否一致(RootAndLAndR变量)。 

        通过逻辑与(LAndR && RootAndLAndR)综合子树结果与根节点关系,最终返回结论。 


带注释的代码解析

class Solution {
public:
    bool isUnivalTree(TreeNode* root) {
        // 空树或仅含根节点,直接返回true
        if (!root || (!root->left &&!root->right))  
            return true;  
        
        // 递归判断左右子树是否为单值树
        bool LAndR = isUnivalTree(root->left) && isUnivalTree(root->right);  
        // 判断根节点与左右子节点是否值相同
        bool RootAndLAndR = true;  
        if (root->left && root->right)  
            RootAndLAndR = (root->val == root->left->val && root->val == root->right->val);  
        else if (root->left)  
            RootAndLAndR = (root->val == root->left->val);  
        else  
            RootAndLAndR = (root->val == root->right->val);  
        
        // 综合子树结果与根节点关系
        return LAndR && RootAndLAndR;  
    }
};


参考:力扣965题 解题思路和步骤 C++代码实现,力扣题库答案在哪里

原创内容 转载请注明出处

分享给朋友:

相关文章

力扣5:中心扩散法 轻松破解最长回文子串

力扣5:中心扩散法 轻松破解最长回文子串

题目解读:在一个给定的字符串中,我们需要找到最长的回文子串。回文是指正读反读都相同的字符串,如"aba"、"abba"都是回文。这个问题看似简单,但要在字符串中...

牛客DP41精讲:当背包必须装满时,你的状态转移方程该如何调整?

牛客DP41精讲:当背包必须装满时,你的状态转移方程该如何调整?

题目重解我们面对一个经典背包问题的变体:给定n个物品,每个物品有重量w和价值v,背包容量为V。需要回答两个问题:1) 普通情况下能获得的最大价值;2) 必须恰好装满背包时的最大价值(若无法装满则输出0...

标题:洛谷B3617题解析:八进制转十六进制算法实现与优化(附AC100代码)

标题:洛谷B3617题解析:八进制转十六进制算法实现与优化(附AC100代码)

一、题目解读洛谷B3617题要求将输入的八进制字符串转换为十六进制表示。题目需处理大数场景,且对输入合法性有明确限制(长度不超过1000,仅包含0-7字符)。由于八进制与十六进制无法直接转换,需借助十...

牛客14496题解:括号最大深度问题(栈思想与代码优化)

牛客14496题解:括号最大深度问题(栈思想与代码优化)

一、题目解读牛客14496题要求计算给定括号字符串中的最大深度。例如,对于字符串 "(()())",最大深度为2。题目考察对括号嵌套结构的理解,以及如何通过编程找到最深嵌套层次。二...

力扣3112题解法:带时间限制的最短路径问题解析(C++代码)

力扣3112题解法:带时间限制的最短路径问题解析(C++代码)

一、题目解读力扣3112题要求解决带时间限制的最短路径问题:给定一个有向图,节点具有消失时间,需计算从起点到各节点的最短路径,且路径总时间不能超过节点的消失时间。题目难点在于需在传统最短路径算法(如D...

【洛谷1184题解析】用C++高效解决地点匹配问题(附代码与解题思路)

【洛谷1184题解析】用C++高效解决地点匹配问题(附代码与解题思路)

一、题目解读洛谷1184题要求处理一组地点列表与行程记录,统计其中匹配的天数。题目难点在于高效处理带有空格的字符串输入,以及快速判断每日行程是否在高手可去地点集合中。需要兼顾输入格式解析与算法效率。二...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。