提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
今天是跟着代码随想录刷题的第17天,主要学了翻转二叉树和对称二叉树。
一、翻转二叉树
思路:这里是用到一个递归,主要是每一层都是把左子树和右子树交换。
class Solution {
public:
TreeNode* invertTree(TreeNode* root) {
if(root==NULL) return NULL;
swap(root->left,root->right);
invertTree(root->left);
invertTree(root->right);
return root;
}
};
二、对称二叉树
思路:还是用递归,看一下左子树的右节点和右子树的左节点是不是一样的。
class Solution {
public:
bool isSymmetric(TreeNode* root) {
if(root==NULL) return true;
return compare(root->left,root->right);
}
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 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 result=outside&&inside;
return result;
}
};