LeetCode——Symmetric Tree
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相关推荐
- [leetcode]Symmetric Tree
问题叙述性说明: Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its cente ...
- 【LeetCode 剑指offer刷题】树题6:28 对称二叉树(101. Symmetric Tree)
[LeetCode & 剑指offer 刷题笔记]目录(持续更新中...) 101. Symmetric Tree /** * Definition for a binary tree no ...
- LeetCode 101. Symmetric Tree
LeetCode 101. Symmetric Tree Solution1 参考<剑指offer>上的解法:https://blog.csdn.net/allenlzcoder/arti ...
- 【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 ...
- [LeetCode] Binary Tree Level Order Traversal 二叉树层次遍历(DFS | BFS)
目录: 1.Binary Tree Level Order Traversal - 二叉树层次遍历 BFS 2.Binary Tree Level Order Traversal II - 二叉树层次 ...
- [LeetCode] Binary Tree Paths - 二叉树基础系列题目
目录: 1.Binary Tree Paths - 求二叉树路径 2.Same Tree - 判断二叉树相等 3.Symmetric Tree - 判断二叉树对称镜像 Binary Tree Path ...
- Symmetric Tree (101)
Symmetric Tree Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its ...
- 101. Symmetric Tree (C语言)
101. Symmetric Tree (C语言) 判断是否为左右镜面对称的二叉树 题目 Given the root of a binary tree, check whether it is a ...
- leetcode python3 简单题101. Symmetric Tree
1.编辑器 我使用的是win10+vscode+leetcode+python3 环境配置参见我的博客: 链接 2.第一百零一题 (1)题目 英文: Given a binary tree, chec ...
- Leetcode: 101. Symmetric Tree
题目 Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). Fo ...
最新文章
- php 析构不执行,PHP析构方法 __destruct() 不触发的两个解决办法
- Objective-C开发编码规范
- 怎么导出插件_不会插画没关系,插件帮你快速搞定
- 使用互斥体使程序只运行一个
- python manager是进程安全的么_Python在进程之间共享锁
- Slide:配置Oracle 10g双向流复制
- keras训练完以后怎么预测_农村小孩只有户口,没有承包地,以后怎么养老?看完我安心了...
- OpenShift 4 - 用 Quay Operator 安装 Quay 环境(4.10 修正)
- 集成学习—随机森林原理(理解与论文研读)
- 4.3. tensorflow2实现相关分析概述与简单相关系数计算——python实战
- 【沫沫金】Sql子查询Not In 无结果原因
- 如何在Java项目中定义并调用自己编写的native方法?
- 呼叫中心系统okcc怎样防护盗打?
- 【异常】because it is a JDK dynamic proxy that implements
- 关于学习scala中lazy关键字的记录
- SQLserver With As 用法
- 华为机试真题 C++ 实现【乱序整数序列两数之和绝对值最小】
- python超实用基础一览通
- .vm后缀的文件是什么?
- Excel中的xlsm文件怎么查看vba代码
热门文章
- android ios9 rom,谁说安卓不如苹果?看Android7.0如何逆袭iOS9.3
- 互联网金融革命已让银行家们彻夜难眠
- phpstorm配置phpunit单元测试及PHPunit断言函数
- GROMACS Tutorial 3-Umbrella Sampling
- IT-RS-IPV6-EUI-64
- JavaScript 的 switch 有四样写法,你知道么?
- android 充电模式deamon_它是首款无线充电手机,也是雷军十年前的最爱极客博物馆...
- material-table的使用
- 2019ICPC徐州打铁心得
- 百练 2755:神奇的口袋