226.翻转二叉树 (优先掌握递归)
leetcode链接
代码随想录链接
一刷状态:未通过(未理解题目)
思路
利用递归的思路,简化至每个子树的翻转。
class Solution {
public:
void invert(TreeNode* root)
{
if(root==nullptr) return;
swap(root->left,root->right);
invert(root->left);
invert(root->right);
}
TreeNode* invertTree(TreeNode* root) {
if(root==nullptr) return nullptr;
invert(root);
return root;
}
};
101. 对称二叉树 (优先掌握递归)
leetcode链接
代码随想录链接
一刷状态:通过
思路
递归三部曲
- 确定递归函数的参数和返回值
输入两个节点,判断是否一致 - 确定终止条件
一致的条件(有一个为null,或者数值不一致) - 确定单层递归的逻辑
比较left->left, right->right 和 left->right, right->left
class Solution {
public:
bool travel(TreeNode* left, TreeNode*right)
{
if(left==nullptr&&right==nullptr) return true;
if(left==nullptr||right==nullptr) return false;
if(left->val!=right->val) return false;
return (travel(left->left, right->right)&&travel(left->right, right->left));
}
bool isSymmetric(TreeNode* root) {
if(root==nullptr) return false;
return travel(root->left, root->right);
}
};