day15 3.1 二叉树第二天
层序遍历 10
226.翻转二叉树
链接: 226.翻转二叉树
思考:为什么不能中序?
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;
}
};
101.对称二叉树 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;
}
bool isSymmetric(TreeNode* root){
if(root == NULL) return true;
return compare(root->left,root->right);
}
};