对称的二叉树

  1. 题目描述
  2. 思路分析

题目描述

请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。

思路分析

  • 利用二叉树前序遍历,递归实现
  • 先判断当前节点是否满足是镜像二叉树
  • 若满足,递归遍历左右子树
/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};
*/
class Solution {
private:
    // 递归判断是否是对称二叉树
    bool isSymmetricalCore(TreeNode* pRoot1,TreeNode *pRoot2) {
        // 必定一起到达叶子节点
        if (pRoot1 == nullptr && pRoot2 == nullptr) {
            return true;
        }
        // 非对称判断
        if (pRoot1 == nullptr || pRoot2 == nullptr) {
            return false;
        }
        
        // 数值不等,不是对称的
        if (pRoot1->val != pRoot2->val) {
            return false;
        }
        // 递归判断左右子树是否满足对称二叉树的条件
        return isSymmetricalCore(pRoot1->left,pRoot2->right)
            && isSymmetricalCore(pRoot1->right,pRoot2->left);
    }
public:
    bool isSymmetrical(TreeNode* pRoot)
    {
        return isSymmetricalCore(pRoot,pRoot);
    }

};

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 1056615746@qq.com

文章标题:对称的二叉树

字数:250

本文作者:攀登

发布时间:2019-12-26, 23:12:31

最后更新:2024-06-15, 15:53:35

原始链接:http://jiafeimao-gjf.github.io/2019/12/26/sword-the-symmetrical-BTree/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

×

喜欢就点赞,疼爱就打赏