1.翻转二叉树
思路是用前序遍历,递归中止条件是root也就是根节点为空的时候,返回根节点,然后调用invertTree函数进行递归除第一次调用之前,之后的每一次调用之前都会交换跟节点的左右子树
class Solution {
public:
TreeNode* invertTree(TreeNode* root) {
if(root==NULL)return root;
swap(root->left,root->right);
invertTree(root->left);
invertTree(root->right);
return root;
}
};
2.对称二叉树
判断是否为对称二叉树,分有几种情况,如果左节点为空右节点不为空不可反转,同样左不为空右为空也不可翻转,如果左右都为空可翻转,左右都不为空值不等不可翻转,左右都不为空,节点相等,判断为真就继续遍历,通过递归节点,同时判断外侧节点和内测节点两两比较
class Solution {
public:
bool compare(TreeNode* left,TreeNode* right) {
if(left==NULL&&right!=NULL)return false;
else if(left!=NULL&&right==NULL)return false;
else if(left==NULL&&right==NULL)return true;
else if(left->val!=right->val)return false;
bool outside =compare(left->left,right->right);
bool inside =compare(left->right,right->left);
bool isSame=outside&&inside;
return isSame;
3.二叉树的最大深度
后序遍历,当便利完后返回左右最大深度在加1
class Solution {
public:
int maxDepth(TreeNode *root){
if(root==nullptr)return 0;
int l_depth=maxDepth(root->left);
int r_depth=maxDepth(root->right);
return max(l_depth,r_depth)+1;
}
};