LeetCode——Symmetric Tree

# 101

Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).

For example, this binary tree [1,2,2,3,4,4,3] is symmetric:

    1/ \
  2   2/ \ / \
3  4 4  3

But the following [1,2,2,null,3,null,3] is not:

    1/ \
  2   2\   \
   3    3Note:
Bonus points if you could solve it both recursively and iteratively. 

这题是要求判断二叉树是否对称。要求用递归和迭代。这题的思路其实并不难,因为是二叉树。先写出以下几种情况:

1. root为空,返回true,开始递归2. root非空,无子节点,返回true3. 如果不是左右子节点都存在且相等,返回false4. 左右子节点存在且相当,再分别比较左右子树,形成递归

需要第一一个递归函数。这题的递归不难,只要把思路理清,很容易就写出来了。

  • C++/递归方法
/*** 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) return true;return isSymmetric(root -> left,root -> right);}bool isSymmetric(TreeNode* left,TreeNode* right){if(!left && !right)return true;if((left && !right) || (!left && right) || (left -> val != right -> val))return false;return isSymmetric(left -> left,right -> right) && isSymmetric(left -> right,right -> left);}
};   

迭代的方法其实核心思想是一样的,只需要转换一下就可以了。

  • C++/迭代方法
/*** 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)return true;queue<TreeNode*>q1,q2;q1.push(root -> left);q2.push(root -> right);while (!q1.empty() && !q2.empty()){TreeNode* left = q1.front();q1.pop();TreeNode* right = q2.front();q2.pop();if (left == NULL && right == NULL)continue;if (left == NULL || right == NULL)return false;if (left -> val != right -> val)return false;q1.push(left ->l eft);q1.push(left -> right);q2.push(right -> right);q2.push(right -> left);}return true;}
};

使用的是DFS深度优先搜索的算法,其实也可以用BFS广度优先搜索,差别不是很大,不同的比较方式,下面用Python实现。

  • Python
# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = Noneclass Solution(object):def isSymmetric(self, root):""":type root: TreeNode:rtype: bool"""if not root:return Truequeuel, queuer = [root.left], [root.right]while len(queuel) > 0 and len(queuer) > 0:left = queuel.pop()right = queuer.pop()if not left and not right:continueelif not left or not right:return Falseif left.val != right.val:return Falsequeuel.insert(0, left.left)queuel.insert(0, left.right)queuer.insert(0, right.right)queuer.insert(0, right.left)return len(queuel) == 0 and len(queuer) == 0

LeetCode——Symmetric Tree相关推荐

  1. [leetcode]Symmetric Tree

    问题叙述性说明: Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its cente ...

  2. 【LeetCode 剑指offer刷题】树题6:28 对称二叉树(101. Symmetric Tree)

    [LeetCode & 剑指offer 刷题笔记]目录(持续更新中...) 101. Symmetric Tree /**  * Definition for a binary tree no ...

  3. LeetCode 101. Symmetric Tree

    LeetCode 101. Symmetric Tree Solution1 参考<剑指offer>上的解法:https://blog.csdn.net/allenlzcoder/arti ...

  4. 【LeetCode从零单排】No100 Same Tree No101 Symmetric Tree

    题目 1.same tree Given two binary trees, write a function to check if they are equal or not. Two binar ...

  5. [LeetCode] Binary Tree Level Order Traversal 二叉树层次遍历(DFS | BFS)

    目录: 1.Binary Tree Level Order Traversal - 二叉树层次遍历 BFS 2.Binary Tree Level Order Traversal II - 二叉树层次 ...

  6. [LeetCode] Binary Tree Paths - 二叉树基础系列题目

    目录: 1.Binary Tree Paths - 求二叉树路径 2.Same Tree - 判断二叉树相等 3.Symmetric Tree - 判断二叉树对称镜像 Binary Tree Path ...

  7. Symmetric Tree (101)

    Symmetric Tree Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its ...

  8. 101. Symmetric Tree (C语言)

    101. Symmetric Tree (C语言) 判断是否为左右镜面对称的二叉树 题目 Given the root of a binary tree, check whether it is a ...

  9. leetcode python3 简单题101. Symmetric Tree

    1.编辑器 我使用的是win10+vscode+leetcode+python3 环境配置参见我的博客: 链接 2.第一百零一题 (1)题目 英文: Given a binary tree, chec ...

  10. Leetcode: 101. Symmetric Tree

    题目 Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). Fo ...

最新文章

  1. php 析构不执行,PHP析构方法 __destruct() 不触发的两个解决办法
  2. Objective-C开发编码规范
  3. 怎么导出插件_不会插画没关系,插件帮你快速搞定
  4. 使用互斥体使程序只运行一个
  5. python manager是进程安全的么_Python在进程之间共享锁
  6. Slide:配置Oracle 10g双向流复制
  7. keras训练完以后怎么预测_农村小孩只有户口,没有承包地,以后怎么养老?看完我安心了...
  8. OpenShift 4 - 用 Quay Operator 安装 Quay 环境(4.10 修正)
  9. 集成学习—随机森林原理(理解与论文研读)
  10. 4.3. tensorflow2实现相关分析概述与简单相关系数计算——python实战
  11. 【沫沫金】Sql子查询Not In 无结果原因
  12. 如何在Java项目中定义并调用自己编写的native方法?
  13. 呼叫中心系统okcc怎样防护盗打?
  14. 【异常】because it is a JDK dynamic proxy that implements
  15. 关于学习scala中lazy关键字的记录
  16. SQLserver With As 用法
  17. 华为机试真题 C++ 实现【乱序整数序列两数之和绝对值最小】
  18. python超实用基础一览通
  19. .vm后缀的文件是什么?
  20. Excel中的xlsm文件怎么查看vba代码

热门文章

  1. android ios9 rom,谁说安卓不如苹果?看Android7.0如何逆袭iOS9.3
  2. 互联网金融革命已让银行家们彻夜难眠
  3. phpstorm配置phpunit单元测试及PHPunit断言函数
  4. GROMACS Tutorial 3-Umbrella Sampling
  5. IT-RS-IPV6-EUI-64
  6. JavaScript 的 switch 有四样写法,你知道么?
  7. android 充电模式deamon_它是首款无线充电手机,也是雷军十年前的最爱极客博物馆...
  8. material-table的使用
  9. 2019ICPC徐州打铁心得
  10. 百练 2755:神奇的口袋