对称的二叉树

  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

💰

Title:对称的二叉树

Count:250

Author:攀登

Created At:2019-12-26, 23:12:31

Updated At:2024-06-15, 15:53:35

Url:http://jiafeimao-gjf.github.io/2019/12/26/sword-the-symmetrical-BTree/

Copyright: 'Attribution-non-commercial-shared in the same way 4.0' Reprint please keep the original link and author.

×

Help us with donation