单值二叉树
965. 单值二叉树 - 力扣(LeetCode)
https://leetcode.cn/problems/univalued-binary-tree/description/
判断这里面的所有数值是不是一样
方案1:遍历
方案2:拆分子问题
/*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/ bool isUnivalTree(struct TreeNode* root) {//条件满足if(root == NULL){return true;}//判断条件int ret=root->val;if(root->left != NULL && root->left->val != root->val){return false;} if(root->right != NULL && root->right->val != root->val){return false;} return isUnivalTree(root->left) && isUnivalTree(root->right); }解释:
bool isUnivalTree(struct TreeNode* root)
- 这是函数的声明行,定义了一个名为
isUnivalTree的函数,它接收一个指向TreeNode结构体的指针root作为参数。函数返回一个布尔值bool,如果树是单值树则返回true,否则返回false。
if(root == NULL)
- 这行代码检查传入的
root指针是否为NULL。如果是NULL,表示当前节点为空,空树被认为是单值树,因此返回true。
int ret=root->val;
- 这行代码将当前节点
root的值赋给变量ret。这个值将用于和当前节点的左右子节点的值进行比较。
if(root->left != NULL && root->left->val != root->val)
- 这行代码检查当前节点的左子节点是否存在,并且如果存在,它的值是否与当前节点的值
root->val不同。如果是这样,树不是单值树,因此返回false。
if(root->right != NULL && root->right->val != root->val)
- 类似地,这行代码检查当前节点的右子节点是否存在,并且如果存在,它的值是否与当前节点的值
root->val不同。如果是这样,树不是单值树,因此返回false。
return isUnivalTree(root->left) && isUnivalTree(root->right);
- 如果当前节点的左右子节点的值都与当前节点的值相同,这行代码递归地调用
isUnivalTree函数,分别检查左子树和右子树是否也是单值树。如果两个子树都是单值树,那么整个树也是单值树,因此返回true;否则,返回false。总结来说,
isUnivalTree函数通过递归的方式检查每个节点的值是否与其子节点的值相同。如果树中的所有节点的值都相同,那么函数返回true,表示这是一个单值树;如果任何节点的子节点的值与它不同,函数返回false,表示这不是一个单值树。

