专栏首页SnailTyanLeetcode 101. Symmetric Tree

Leetcode 101. Symmetric Tree

版权声明:博客文章都是作者辛苦整理的,转载请注明出处,谢谢! https://blog.csdn.net/Quincuntial/article/details/81069531

文章作者:Tyan 博客:noahsnail.com | CSDN | 简书

1. Description

2. Solution

  • Recursive
/**
 * 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 == NULL) {
            return true;
        }
        return isMirror(root->left, root->right);
    }

    bool isMirror(TreeNode* left, TreeNode* right) {
        if(left == NULL && right == NULL) {
            return true;
        }
        if(left == NULL || right == NULL) {
            return false;
        }
        return left->val == right->val && isMirror(left->left, right->right) && isMirror(left->right, right->left);
    }
};
  • Iterative
/**
 * 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 == NULL) {
            return true;
        }
        queue<TreeNode*> nodes;
        nodes.push(root);
        nodes.push(root);
        while(!nodes.empty()) {
            TreeNode* left = nodes.front();
            nodes.pop();
            TreeNode* right = nodes.front();
            nodes.pop();
            if(left == NULL && right == NULL) {
                continue;
            }
            if(left == NULL || right == NULL) {
                return false;
            }
            if(left->val == right->val) {
                nodes.push(left->left);
                nodes.push(right->right);
                nodes.push(left->right);
                nodes.push(right->left);
            }
            else {
                return false;
            }
        }
        return true;
    }
};

Reference

  1. https://leetcode.com/problems/symmetric-tree/description/

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • House Robber III

    Tyan
  • Leetcode 86. Partition List

    版权声明:博客文章都是作者辛苦整理的,转载请注明出处,谢谢! https://blog.csdn....

    Tyan
  • tensorflow的基本用法——保存神经网络参数和加载神经网络参数

    Tyan
  • 二叉树转链表

    给定一个二叉树,将该二叉树 就地(in-place)转换为单链表。单链表中节点顺序 为二叉树前序遍历顺序。(不额外开辟存储空间) LeetCode 114. ...

    小飞侠xp
  • 利用Theano理解深度学习——Multilayer Perceptron

    对于含有单个隐含层的多层感知机(single-hidden-layer Multi-Layer Perceptron, MLP),可以将其看成是一个特殊的Log...

    zhaozhiyong
  • 一遍文章搞定归并排序-java版

    shengjk1
  • 迁移学习

    sofu456
  • 程序员进阶之算法练习(三)

    前言 看完题目大意,先思考,再看解析;觉得题目大意不清晰,点击题目链接看原文。 A 题目链接 题目大意:n个数字,找出连续一串上升序列的长度。 代码实...

    落影
  • 每日一题 剑指offer(旋转数组的最小数字)

    编程是很多偏计算机、人工智能领域必须掌握的一项技能,此编程能力在学习和工作中起着重要的作用。因此小白决定开辟一个新的板块“每日一题”,通过每天一道编程题目来强化...

    小白学视觉
  • 蒙特.卡罗方法求解圆周率近似值原理与Python实现

    对于某些不能精确求解的问题,蒙特.卡罗方法是一种非常巧妙的寻找近似解的方法。 以求解圆周率的问题为例,假设有一个单位圆及其外切正方形,我们往正方形内扔飞镖,当扔...

    Python小屋屋主

扫码关注云+社区

领取腾讯云代金券