1.单值二叉树
思路:
1️⃣如果节点为空,就不用判断,返回true
2️⃣如果节点不为空,则判断他的左右子节点的值,只要不同,就返回false,相同就继续递归(走到最后会返回true)
/**
* 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;
}
if(root->left)
{
if(root->val != root->left->val)
{
return false;
}
}
if(root->right)
{
if(root->val != root->right->val)
{
return false;
}
}
return isUnivalTree(root->left) && isUnivalTree(root->right);
}
递归发现不同的时候(不管是左还是右)返回false,而最后又是&&关系,所以只要有不同就返回false
流程图:
2.二叉树的最大深度
思路:
这颗树的层数等于左右子树层数大的那个加1,慢慢递归下去,
1️⃣是空就返回0
2️⃣是叶子节点就返回1
很容易写出代码:
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
int maxDepth(struct TreeNode* root){
if(root == NULL)
{
return 0;
}
if(root->left == NULL && root->right == NULL)
{
return 1;
}
return maxDepth(root->left) > maxDepth(root->right) ?
maxDepth(root->left) + 1 : maxDepth(root->right) + 1 ;
}
但是这种代码会超出时间限制,原因是判断左右子树层数时会递归两遍,后面+1时又要递归一遍,所以我们可以用变量先存取来,比较完就返回大的那个。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
int maxDepth(struct TreeNode* root){
if(root == NULL)
{
return 0;