965.单值二叉树
2026/8/5 17:49:40 网站建设 项目流程

目录

一:题目

二:思路

三:代码

四:递归展开图


一:题目

解释:单值二叉树就是指的节点值全相等的二叉树,所以即使是空树也是单值二叉树


二:思路

单值二叉树的递归“大事化小”思路就是:

既然单值二叉树树的每个节点值相等,则我们只需要递归检查每个节点和它的左右孩子值是否相等即可!所以判断当前节点和它的左右孩子值是否相等,这是“大事”中的第一步小事,但这一步做完后问题并没有结束,因为左右子树内部还有大量节点没被检查,所以必须把“左子树是否单值”和“右子树是否单值”当作两个新的“大事”继续递归拆解

递归条件和终止条件:

终止条件:

①:发现当前检查的节点为空 return true(NULL代表不存在 所以没有值不相等这一说 相等)

②:不满足①也就是不为空,若当前节点值和左孩子值或右孩子值不等,return false

递归条件:

当前节点不为空,且和左右孩子值相等,则对左右孩子进行递归检查


三:代码

/** * 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) {} * }; */ class Solution { public: bool isUnivalTree(TreeNode* root) { if(root == NULL)//终止条件① return true; if(root->left && root->left->val != root->val) return false;//终止条件② if(root->right && root->right->val != root->val) return false;//终止条件② //当前节点和它的左右孩子节点值相等 则继续递归它的左右孩子检查 return isUnivalTree(root->left) && isUnivalTree(root->right); } };

解释:

①:先写终止条件①,当前节点是空则true,反之不是空才能进行对当前节点的左右孩子的访问

②:现在写终止条件②即可,当然判断左右孩子值时,需要判断左右孩子是否存在

③:经过上述代码,来到这里就代表当前节点和它的左右节点的值相等,则递归遍历左右孩子进行同样的操作

④:终止条件②只要一个不满足,就代表二叉树不是单值二叉树,最后的递归代码必须用&&,因为两个孩子的递归判断都必须通过


四:递归展开图

注:红色线是递,蓝色线是归

本博客采用此模型:

总:

左:

右:

不太清晰,再对半发:

左上:

左下:

右上:

右下:

📌 [ 作者 ] shylyly
📃 [ 首次发布 ] 2024.8.26
❌ [ 最新修改 ] 2026.8.4
📜 [ 声明 ] 由于笔者水平有限,文中难免有疏漏或不妥之处,还望读者不吝赐教

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询