作者:一个喜欢猫咪的的程序员
专栏:《Leetcode》
喜欢的话:世间因为少年的挺身而出,而更加瑰丽。 ——《人民日报》
目录
101. 对称二叉树
104. 二叉树的最大深度
226. 翻转二叉树
101. 对称二叉树
101. 对称二叉树https://leetcode.cn/problems/symmetric-tree/
题目描述:
给你一个二叉树的根节点 root
, 检查它是否轴对称。
示例:
思路:
可以让左子树跟右子树比较,让左子树的左节点和右子树的右节点作比较。让左子树的右节点和右子树的左节点作比较。 递归循环就可以完成。
代码实现:
bool _isSymmetric(struct TreeNode* root1,struct TreeNode* root2)
{
if(root1==NULL&&root2==NULL)
return true;
if(root1==NULL||root2==NULL)
return false;
if(root1->val!=root2->val)
return false;
return _isSymmetric(root1->left,root2->right)&&_isSymmetric(root1->right,root2->left);
}
bool isSymmetric(struct TreeNode* root){
return _isSymmetric(root->left,root->right);
}
104. 二叉树的最大深度
104. 二叉树的最大深度https://leetcode.cn/problems/maximum-depth-of-binary-tree/
题目描述:
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
示例:
思路:
可参考我的另外一篇博客(数的高度部分): http://t.csdn.cn/MQd0j
代码实现:
int TreeHeight(struct TreeNode* root)
{
if (root == NULL)
return 0;
int left = TreeHeight(root->left);
int right = TreeHeight(root->right);
return left > right ? left+1 : right+1;
}
int maxDepth(struct TreeNode* root){
return TreeHeight(root);
}
226. 翻转二叉树
226. 翻转二叉树https://leetcode.cn/problems/invert-binary-tree/
题目描述:
给你一棵二叉树的根节点 root
,翻转这棵二叉树,并返回其根节点。
示例:
思路:
让左右节点交换地址,递归下去。
代码实现:
struct TreeNode* invertTree(struct TreeNode* root){
if(root)
{
if(root->left||root->right)
{
struct TreeNode*tmp=root->left;
root->left=root->right;
root->right=tmp;
invertTree(root->left);
invertTree(root->right);
}
}
return root;
}