class Solution:
def isSymmetric(self, root: TreeNode) -> bool:
if not root:
return true
q = queue()
q.put(root.left)
q.put(root.right)
while not q.empty():
left = q.get()
right = q.get()
if not left and not right:
continue
if not left or not right or left.val != right.val:
return False
q.put(left.left)
q.put(right.right)
q.put(left.right)
q.put(right.left)
return True
class Solution:
def isSymmetric(self, root: TreeNode) -> bool:
def Sysmetirc(root1, root2):
if not root1 and not root2:
return True
if not root1 or not root2 or root1.val != root2.val:
return False
return Sysmetirc(root1.left, root2.right) and Sysmetirc(root1.right, root2.left)
if not root:
return True
return Sysmetirc(root, root)
共以下 23 个回答
class Solution {
public:
bool checkSymmetricTree(TreeNode* root) {
if(root NULL || (root->right NULL && root->left NULL))
{
return true;
}
return function(root->right, root->left);
}
bool function(TreeNode* rootright, TreeNode* rootleft)
{
if(rootright NULL && rootleft NULL)
{
return true;
}
if(rootright NULL || rootleft NULL)
{
return false;
}
if(rootright->val != rootleft->val)
{
return false;
}
return (function(rootright->right, rootleft->left) && function(rootright->left, rootleft->right));
}
};
时间复杂度:O(n),空间复杂度:O(n)。
bool isSymmetric(TreeNode* root) {
if (!root) return true;
queue<TreeNode*> q1, q2;
q1.push(root->left);
q2.push(root->right);
while (!q1.empty() && !q2.empty()) {
auto p1 = q1.front();
auto p2 = q2.front();
q1.pop();
q2.pop();
if (!p1 && !p2) continue;
if (!p1 || !p2 || p1->val != p2->val) return false;
q1.push(p1->left);
q1.push(p1->right);
q2.push(p2->right);
q2.push(p2->left);
}
return true;
}//时间复杂度O(n),空间复杂度O(n)
Definition for a binary tree node.
class TreeNode:
def init(self, x):
self.val = x
self.left = None
self.right = None
class Solution:
def isSymmetric(self, root: TreeNode) -> bool:
if not root:
return true
时间复杂度:O(N)
空间复杂度:O(N)
打卡
// // 递归,分别判断两个对称节点是否相同
// bool check(TreeNode left, TreeNode *right) {
// if (!left && !right) return true;
// if (!left || !right) return false;
// // 判断左右节点的值是否相同, 并且递归左子树的左孩子节点和右子树的右孩子节点判断,以及左子树的右孩子节点和右子树的左孩子节点
// return left->val right->val && check(left->left, right->right) && check(left->right, right->left);
// }
// bool isSymmetric(TreeNode root) {
// return check(root->left, root->right);
// }
//使用递归 实现对称
//先进行头节点的判断 判读后直接将其分成左右两个节点
//如果左右节点中的其中一个为空 则为错误 如果全为空 则为真 如果左右节点的不等为空
//如果左右节点的值相同则进行左右节点之后的左右判定 递归 遍历所有节点判定
class Solution{
public:
bool isSymmertic(Treenode *root)
{
if(root NULL||root.rightNULL root.leftNULL)
return root;
return f(root->left,root->right);
}
bool f(TreeNode *A,TreeNode *B)
{
if(!A&&!B)
return true;
if(!A||!B)
return false;
if(A->val!=B->val)
return false;
return f(A->left,B->right)&&f(A->right&&B->left);
}
};
复杂度O(n)
left.left - right.right和left.right - right.left对比,本层级就是判断空的情况以及值的情况时间复杂度O(n)
空间复杂度O(1)
时间复杂度:O(n)
空间复杂度:O(n)
class Solution {
public:
bool isSymmetric(TreeNode* root) {
if(rootNULL) return true;
if(root->leftNULL&&root->rightNULL) return true;
return dfs(root->left, root->right);
}
bool dfs(TreeNode* a, TreeNode* b){
if(aNULL&&bNULL) return true;
if(aNULL||bNULL) return false;
return (a->valb->val)&&(dfs(a->left,b->right)&&(dfs(a->right,b->left)));
}
};
自己用对比原来的树和镜像树是否相等的方法。
将答案的方法自己写了一遍
時間複雜度: O(n) 空間複雜度: O(n)
需判斷左右子樹 是否為空 , 若是一個空一個有值則可以提前返回false
若是都有值則繼續判斷左右節點值是否相同…
//root的左右支一起走,判断是否相等,递归输出,on,on时间空间
bool checktree(struct TreeNode* p,struct TreeNode* q){
if(!p&&!q)return true;
if(!p||!q) return false;
return p->val q->val && checktree(p->left,q->right)&&checktree(q->left,p->right);
}
bool isSymmetric(struct TreeNode* root){
if (rootNULL)return false;
return checktree(root,root);
}
“`python
class Solution:
def mirrorTree(self,l:TreeNode,r:TreeNode) -> bool:
if not l and not r: return True
if not l or not r or l.val != r.val: return False
“`python
递归判断镜像
递归判断
打卡
1、递归
// 时间复杂度O(n),空间复杂度O(n)