栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【数据结构】C语言算法练习题——判断题目中给出的一个二叉树是否为对称二叉树

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【数据结构】C语言算法练习题——判断题目中给出的一个二叉树是否为对称二叉树

题目链接:

力扣https://leetcode.cn/problems/symmetric-tree/submissions/

解题思路:

1. 首先要明确从二叉树的逻辑结构来说,对称并不是对称轴左右俩边的结点值相同,例如:

该图中的二叉树就不是对称的

2. 要想判断是否为对称二叉树,则需要左子树与右子树去进行比较,即它们的比较是相反的。而且根结点的值相同

3. 需要创建一个自定义比较函数用来比较,也包括比较一边的子树为空,而另一边的子树不为空的情况

4. 由此我们可以了解到,当问题的本质是左子树与右子树的相互比较时,其比较的则是二叉树中每一层的结点,而每一层的结点依次又往下延伸出新的结点,而该类比较就需要考虑其中一个子树为空,另一个子树不为空的特殊情况

代码实现:

bool check(struct TreeNode *root1,struct TreeNode *root2)//创建一个比较函数
{
    if(root1 == NULL && root2 == NULL)
    {
        return true;
    }

    if(root1 == NULL || root2 == NULL)//创建函数的意义
    {
        return false;
    }

    if(root1->val != root2->val)
    {
        return false;
    }
    
    return check(root1->left,root2->right)&&check(root1->right,root2->left);
    
}

bool isSymmetric(struct TreeNode* root)
{
    if (root == NULL)
    {
        return true;
    }

    
   
    return check(root->left,root->right);
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/966407.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号