LeetCode: 101. Symmetric Tree

LeetCode: 101. Symmetric Tree

题目描述

Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).

For example, this binary tree [1,2,2,3,4,4,3] is symmetric:

    1
   / \   2   2
 / \ / \ 3  4 4  3

But the following [1,2,2,null,3,null,3] is not:

    1
   / \   2   2
   \   \    3    3

Note:
Bonus points if you could solve it both recursively and iteratively.
题目大意: 判断给定二叉树是否是对称的。

解题思路

判断给定二叉树是否是对称的,只需要判断其左右子树是否对称。而判断两棵二叉树(T1,T2)是否对称,只需要判断:
1. 树根的元素是否相等?
2. T1 的左子树是否和 T2 的右子树对称?
3. T1 的右子树是否和 T2 的左子树对称?

AC代码

  • 递归解法
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */
class Solution {
    // 判断两个二叉树是否对称
    bool isSymmetric(TreeNode* leftTree, TreeNode* rightTree)
    {
        if(leftTree == nullptr || rightTree == nullptr) return (leftTree == rightTree);
        if(leftTree->val != rightTree->val) return false;
        return isSymmetric(leftTree->left, rightTree->right) &&
         isSymmetric(leftTree->right, rightTree->left);
    }
public:
    bool isSymmetric(TreeNode* root) {
        if(root == nullptr) return true;
        return isSymmetric(root->left, root->right);
    }
};
  • 迭代解法
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */
class Solution {
public:
    bool isSymmetric(TreeNode* root) {
        if(root == nullptr) return true;
        queue<TreeNode*> que; 
        bool isSym = true;
        que.push(root->left);
        que.push(root->right);

        while(!que.empty())
        {
            TreeNode* leftTree = que.front();
            que.pop();
            TreeNode* rightTree = que.front();
            que.pop();
            if(leftTree == nullptr || rightTree == nullptr) isSym = (leftTree == rightTree);
            else if(leftTree->val != rightTree->val) isSym = false;
            else
            {
                que.push(leftTree->left);
                que.push(rightTree->right);
                que.push(leftTree->right);
                que.push(rightTree->left);
            }

            if(isSym == false) break;
        }

        return isSym;
    }
};
全部评论

相关推荐

已经麻木了...
投递小米集团等公司10个岗位
点赞 评论 收藏
分享
算法题感觉都挺简单的啊
投递哔哩哔哩等公司10个岗位
点赞 评论 收藏
分享
来个厂收我吧:首先,市场侧求职我不是很懂。 但是,如果hr把这份简历给我,我会觉得求职人不适合做产品经理。 问题点: 1,简历的字体格式不统一,排版不尽如人意 2,重点不突出,建议参考star法则写个人经历 3,印尼官方货币名称为印度尼西亚卢比(IDR),且GMV690000印尼盾换算为305人民币,总成交额不高。 4,右上角的意向职位在发给其他公司时记得删除。 5,你所有的经历都是新媒体运营,但是你要投市场营销岗位,jd和简历不匹配,建议用AI+提示词,参照多个jd改一下经历内容。 修改建议: 1,统一字体(中文:思源黑体或微软雅黑,英文数字:time new romans),在word中通过表格进行排版(b站学) 2,校招个人经历权重:实习经历=创业经历(大创另算)>项目经历>实训经历>校园经历 3,请将项目经历时间顺序改为倒序,最新的放最上方。 4,求职方向不同,简历文字描述侧重点也需要不同。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务