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

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

4个月前 (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++代码实现,力扣题库答案在哪里

原创内容 转载请注明出处

分享给朋友:

相关文章

力扣1221:一次扫描解决分割平衡字符串 时间O(n)空间O(1)

力扣1221:一次扫描解决分割平衡字符串 时间O(n)空间O(1)

题目重解给定一个仅包含'L'和'R'的字符串,要求将其分割成尽可能多的子串,且每个子串中'L'和'R'的数量相等。例如输入"R...

NOIP2005 普及组 洛谷P1408 背包问题的空间优化技巧与实战应用

NOIP2005 普及组 洛谷P1408 背包问题的空间优化技巧与实战应用

题目重解想象你是一名药师,有t分钟在山上采集m种草药。每种草药需要time分钟采集,价值为num。这就像考试时分配时间做题,要选择收益最大的题目组合。题目要求计算在规定时间内能获得的最大草药价值。解题...

力扣144:递归之美 轻松掌握二叉树前序遍历

力扣144:递归之美 轻松掌握二叉树前序遍历

题目解读二叉树的前序遍历是一种基础但重要的树遍历方式,其遍历顺序为:先访问根节点,然后递归地前序遍历左子树,最后递归地前序遍历右子树。给定一个二叉树的根节点,我们需要按照这个顺序访问所有节点,并将它们...

【动态规划入门】力扣509题:斐波那契数列的经典解法与优化思路

【动态规划入门】力扣509题:斐波那契数列的经典解法与优化思路

题目解读‌斐波那契数列是一个经典的数学问题,在计算机科学中常被用作算法教学的入门案例。这个神奇的数列从0和1开始,后续每个数字都是前两个数字之和。题目要求我们计算第n个斐波那契数,看似简单的问题背后却...

【CSP-S 2019】括号树(洛谷P5658)解题报告:栈+DFS+异或优化详解

【CSP-S 2019】括号树(洛谷P5658)解题报告:栈+DFS+异或优化详解

一、题目解读括号树问题(洛谷P5658)要求处理一个由括号序列转化的树结构:每个节点表示一个括号,'('为子节点,')'为父节点。题目给定一棵n个节点的树,需计算每个节...

力扣第44题:寻找两个正序数组的中位数 - 合并排序解法详解

力扣第44题:寻找两个正序数组的中位数 - 合并排序解法详解

内容简介本文详细解析了力扣第44题"寻找两个正序数组的中位数"的合并排序解法。通过双指针技术合并两个有序数组,然后直接计算合并后数组的中位数。虽然时间复杂度为O(m+n),但这种方...

发表评论

访客

看不清,换一张

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