当前位置: 首页剑指offer刷题第四期问题详情 【二叉树专题】剑指 Offer 28. 对称的二叉树 本问题对应课程链接:剑指offer刷题第四期 要求: 1、请打卡你的解题代码,如果能简单说一下思路则简单说一下思路。 2、给出你代码所用的时间复杂度和空间复杂度
共以下 35 个回答
执行用时:
12 ms
对称二叉树
对称二叉树
递归
层序遍历来判断对称,时间复杂度O(n), 空间复杂度队列中最多有一半结点,故为O(n)
时间复杂度:O(n)
空间复杂度:树的高度
“`c++
//时间复杂度O(n)
//空间复杂度O(n)
class Solution {
public:
bool dfs(TreeNode *A,TreeNode *B)
{
if(A==NULL&&B==NULL) return true;
if(A==NULL||B==NULL) return false;
return A->val==B->val&&dfs(A->left,B->right)&&dfs(A->right,B->left);
}
bool isSymmetric(TreeNode* root) {
if(root==NULL) return true;
return dfs(root->left,root->right);
}
};
“`
代码
感觉有点乱
时间: O(n)
空间: O(n)
解答:
class Solution {
public:
bool check(TreeNode *p, TreeNode *q) {
if (!p && !q) return true;
if (!p&&q || !q&&p) return false;
return p->val q->val && check(p->left, q->right) && check(p->right, q->left);
}
};
代码:
Day7:下面是代码
ts写的
思路:这道题的写递归函数那步不太好想。要判断一棵树是否是对称的,我们应该使用两个指针指向当前树的左右子树,然后再判断左子树的左子树和右子树的右子树是否相同的同时判断左子树的右子树和右子树的左子树是否相同
七
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public boolean isSymmetric(TreeNode root) {
return root null ? true : recur(root.left, root.right);
}
boolean recur(TreeNode L, TreeNode R) {
if (L null && R null)
return true;
if (L null || R null || L.val != R.val)
return false;
return recur(L.left, R.right) && recur(L.right, R.left);
}
}
c++ 代码
};
”’java
class Solution {
public boolean isSymmetric(TreeNode root) {
if(root null){
return true;
}
return isSymmetricTwoNodes(root.left,root.right);
}
”’
时间复杂度O(n)
空间复杂度O(1)
时间复杂度:O(n)
空间复杂度:O(n)
遍历左右子树,左子树的左子树和右子树的右子树比较
public boolean isSymmetric(TreeNode root) {
//左右子树都要是镜像的
if(rootnull)
{
return true;
}
return isSymmetric1(root.left,root.right);
}
时间复杂度:O(n);
通过「同步移动」两个指针的方法来遍历这棵树,pp 指针和 qq 指针一开始都指向这棵树的根,随后 pp 右移时,qq 左移,pp 左移时,qq 右移。每次检查当前 pp 和 qq 节点的值是否相等,如果相等再判断左右子树是否对称
class Solution {
public:
bool check(TreeNode *p, TreeNode *q) {
if (!p && !q) return true;
if (!p || !q) return false;
return p->val q->val && check(p->left, q->right) && check(p->right, q->left);
}
};
时间复杂度O(n)空间复杂度O(n)时间复杂度O(n),空间复杂度O(n)