单值二叉树
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
,表示这不是一个单值树。