226. 翻转二叉树 - 力扣(LeetCode)
思路:交换左右结点
class Solution {
public:
TreeNode* invertTree(TreeNode* root) {
if(root==nullptr){
return root;
}
swap(root->left,root->right);
invertTree(root->left);
invertTree(root->right);
return root;
}
};
101. 对称二叉树 - 力扣(LeetCode)
思路:进行递归遍历,当左结点为空右结点不为空时当前二叉树就不对称了,反之亦然。
重点:左子树的左子树与右子树的右子树比较,左子树的右子树与右子树的左子树比较
class Solution {
public:
bool fun(TreeNode* left,TreeNode* right){
if(left==NULL&&right==NULL){
return true;
}
if(left==NULL||right==NULL){
return false;
}
return left->val==right->val&&fun(left->left,right->right)&&fun(left->right,right->left);
}
bool isSymmetric(TreeNode* root) {
if(root==NULL){
return true;
}
return fun(root->left,root->right);
}
};
104. 二叉树的最大深度 - 力扣(LeetCode)
思路:左右结点分别遍历求最大值
class Solution {
public:
int maxDepth(TreeNode* root) {
if(root==NULL){
return 0;
}
return max(maxDepth(root->left)+1,maxDepth(root->right)+1);
}
};
111. 二叉树的最小深度 - 力扣(LeetCode)
思路:用变量接受每层递归的层数
重点:根节点到叶子节点的距离为深度所以根结点没有左子树或者右子树不算最小深度
class Solution {
public:
int minDepth(TreeNode* root) {
if(root==NULL){
return 0;
}
int a=minDepth(root->left);
int b=minDepth(root->right);
//当左右其中一个节点为空,其中必然有一个为0,所以返回a+b+1
//都不为空,就返回其中最小是深度
return root->left==NULL||root->right==NULL?a+b+1:min(a,b)+1;
}
};
总结
学会使用二叉树的遍历方式,了解深度和高度的区别,根节点到叶子节点的距离为深度,高度是从叶节点数到它的根节点。