101. Symmetric Tree [easy] (Python)
来源:互联网 发布:mac epub mobi 转换 编辑:程序博客网 时间:2024/04/30 06:03
题目链接
https://leetcode.com/problems/symmetric-tree/
题目原文
Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).
For example, this binary tree is symmetric:
1 / \ 2 2 / \ / \3 4 4 3
But the following is not:
1 / \ 2 2 \ \ 3 3
题目翻译
给定一个二叉树,判断它是否是自己的镜像(中心对称)。
思路方法
思路一
递归,对于每个节点,检查树的左右节点值是否相等,同时判断:左节点的左子树和右节点的右子树是否对称、右节点的左子树和左节点的右子树是否对称。
代码
# 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 True return self.mirror(root.left, root.right) def mirror(self, left, right): if not left or not right: return left == right if left.val != right.val: return False return self.mirror(left.left, right.right) and self.mirror(left.right, right.left)
思路二
非递归算法。算是将上面的递归方法改写成非递归方法,实际上是深度优先搜索(DFS)。
代码
# 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 True stackl, stackr = [root.left], [root.right] while len(stackl) > 0 and len(stackr) > 0: left = stackl.pop() right = stackr.pop() if not left and not right: continue elif not left or not right: return False if left.val != right.val: return False stackl.append(left.left) stackl.append(left.right) stackr.append(right.right) stackr.append(right.left) return len(stackl) == 0 and len(stackr) == 0
思路三
除了可以DFS,也可以BFS,直接上代码:
代码
# 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 True queuel, 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: continue elif not left or not right: return False if left.val != right.val: return False queuel.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
PS: 新手刷LeetCode,新手写博客,写错了或者写的不清楚还请帮忙指出,谢谢!
转载请注明:http://blog.csdn.net/coder_orz/article/details/51579528
0 0
- 101. Symmetric Tree [easy] (Python)
- Easy-题目25:101. Symmetric Tree
- Leetcode 101. Symmetric Tree (Easy) (cpp)
- LeetCode解题报告 101. Symmetric Tree [easy]
- Symmetric Tree----easy
- Symmetric Tree(easy)
- 101. Symmetric Tree Leetcode Python
- [leetcode:python]101. Symmetric Tree
- [Leetcode 101, Easy] Symmetric Tree
- Easy 101题 Symmetric Tree
- LeetCode #101 - Symmetric Tree - Easy
- 【Leetcode-Easy-101】 Symmetric Tree
- Leet Code OJ 101. Symmetric Tree [Difficulty: Easy]
- 101.LeetCode Symmetric Tree(easy)[递归 二叉树]
- LeetCode 101. Symmetric Tree(Python)
- 【Leetcode】【python】Symmetric Tree
- Easy 21 Symmetric Tree(101)
- LeetCode-Easy刷题(20) Symmetric Tree
- 八大排序算法
- CSS list-style 属性
- WSTMall 微信登录配置
- Qt中文手册 之 QTreeWidgetItem
- 谈论谋略
- 101. Symmetric Tree [easy] (Python)
- leetcode Gas Station
- 自己写的字符处理函数+字符处理函数
- Android多个activity退出问题处理
- JAV开发笔记系列--1-在MAC上利用Android Studio开发JAVA项目
- 通过两个视图监控快速回复区:V$RECOVERY_FILE_DEST and V$RECOVERY_AREA_USAGE.
- C++实验7-函数复习
- iOS学习- 13 删除Table View中的Cell - Todo App
- 不用临时变量交换两个数的值