226. 翻转二叉树
题目链接
题目描述
给你一棵二叉树的根节点 root
,翻转这棵二叉树,并返回其根节点。
代码思路
前序遍历将左右子树翻转即可
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
void preorder(TreeNode* root){
if(root==NULL) return;
TreeNode* temp=root->left;
root->left=root->right;
root->right=temp;
preorder(root->left);
preorder(root->right);
}
TreeNode* invertTree(TreeNode* root) {
preorder(root);
return root;
}
};
代码随想录中的利用栈的迭代法没有看懂,先放一下
101. 对称二叉树
题目链接
题目描述
给你一个二叉树的根节点 root
, 检查它是否轴对称。
代码思路
这个题本来是想左右判断是否等于的,但是不知道是怎么想的,却是先将右子树翻转,然后左右子树进行先序遍历,比较结果,但是这个思路应该是正确的,不知道为什么结果再碰见含有NULL二叉树时出现了错误
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
void rightreverse(TreeNode* root){
if(root==NULL) return;
TreeNode* temp=root->left;
root->left=root->right;
root->right=temp;
rightreverse(root->left);
rightreverse(root->right);
}
bool isSymmetric(TreeNode* root) {
rightreverse(root->right);
vector<int> leftvar,rightvar;
leftvar=preorder(root->left);
rightvar=preorder(root->right);
int leftlen=leftvar.size();
int rightlen=rightvar.size();
if(leftlen!=rightlen) return false;
for(int i=0;i<leftlen;i++){
if(leftvar[i]!=rightvar[i])
{
return false;
}
}
return true;
}
vector<int> preorder(TreeNode* root){
vector<int> var;
reverse(root,var);
return var;
}
void reverse(TreeNode* root,vector<int>& var){
if(root==NULL) return;
var.push_back(root->val);
reverse(root->left,var);
reverse(root->right,var);
}
};
遂按照代码随想录里面进行编写,在编写的时候还写错了,在左右子节点不为空时写成了两者相等则返回true,应该是不相等位false,相等还得继续判断才能确定是否位true。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
bool compare(TreeNode* left,TreeNode* right){
if(left==NULL&&right!=NULL) return false;
if(left!=NULL&&right==NULL) return false;
if(left==NULL&&right==NULL) return true;
if(left!=NULL&&right!=NULL&&left->val!=right->val) return false;
bool outside,inside,end;
outside=compare(left->left,right->right);
inside=compare(left->right,right->left);
end=outside&&inside;
return end;
}
bool isSymmetric(TreeNode* root) {
if(root==NULL) return true;
return compare(root->left,root->right);
}
};