对称二叉树

题目

给你一个二叉树的根节点 root , 检查它是否轴对称。

示例 1:

输入:root = [1,2,2,3,4,4,3]
输出:true
示例 2:

输入:root = [1,2,2,null,3,null,3]
输出:false

思路

递归法

根据递归四部曲来解决,注意的是递归三部曲+自己理解的一步曲,按照该步骤进行,具体分析在本目录下的递归法里面讲到了

迭代法

利用队列的特性来进行节点的数值的比较,观看下面的动态图就能理解这样写的目的了
https://code-thinking.cdn.bcebos.com/gifs/101.对称二叉树.gif

代码

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
//递归法
class Solution {
public:
    bool is_Perfect(TreeNode* left,TreeNode* right){
        if(left!=NULL && right==NULL){
            return false;
        }else if(left==NULL && right!=NULL){
            return false;
        }else if(left==NULL && right==NULL){
            return true;
        }else if(left->val!=right->val){
            return false;
        }
        //以上为终止条件
        return is_Perfect(left->left,right->right)&&is_Perfect(left->right,right->left);
        //以上为单层逻辑
    }


    bool isSymmetric(TreeNode* root) {
        return is_Perfect(root->left,root->right);
    }
};
//迭代法
class Solution {
public:
    bool isSymmetric(TreeNode* root) {
        if(root==NULL){
            return true;
        }
        queue<TreeNode*>qu;//queue是可以存储空的即null

        qu.push(root->left);
        qu.push(root->right);
        while(!qu.empty()){
            TreeNode* first = qu.front();
            qu.pop();
            TreeNode* second = qu.front();
            qu.pop();
            if(first==NULL&&second==NULL){
                continue;
            }
            if((first!=NULL && second==NULL)||(second!=NULL && first==NULL)||
            (first->val!=second->val)){
                return false;
            }
            qu.push(first->left);
            qu.push(second->right);
            qu.push(first->right);
            qu.push(second->left);
        }
        return true;
    }
};
posted @ 2023-03-14 10:27  铜锣湾陈昊男  阅读(6)  评论(0)    收藏  举报