当前位置:网站首页>二叉树 | 对称二叉树、相同的树、子树相同 | leecode刷题笔记
二叉树 | 对称二叉树、相同的树、子树相同 | leecode刷题笔记
2022-08-10 22:23:00 【Begonia_cat】
跟随carl代码随想录刷题
语言:python
101. 简单
对称二叉树
题目:给你一个二叉树的根节点 root , 检查它是否轴对称。
示例1:
输入:root = [1,2,2,3,4,4,3]
输出:true
示例2:
输入:root = [1,2,2,null,3,null,3]
输出:false
题目分析
左右节点为空:对称,return true
左节点为空,右节点不为空:不对称,return false
左节点不为空,右节点为空:不对称,return false
左右节点都不为空:比较节点数值,不相同return false
否则:return true
下一步
- 比较二叉树外侧是否对称:传入的是左节点的左孩子,右节点的右孩子。
- 比较内测是否对称,传入左节点的右孩子,右节点的左孩子。
- 如果左右都对称就返回true ,有一侧不对称就返回false 。
完整代码如下
递归法
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def isSymmetric(self, root: Optional[TreeNode]) -> bool:
if not root:
return True
return self.compare(root.left, root.right)
def compare(self, left, right):
# 首先排除节点为空的情况
if left == None and right != None:return False
elif left != None and right == None: return False
elif left == None and right == None: return True
elif left.val != right.val: return False
# 此时就是:两个节点都不为空且数值相等的情况
# 进行递归,做下一层判断
outside = self.compare(left.left, right.right) # 左子树的左节点,右子树的右节点
inside = self.compare(left.right, right.left) # 左子树的右节点,右子树的左节点
isSame = outside and inside
return isSame
使用队列
使用队列来对比两个树(根节点的左右子树)是否相互翻转
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def isSymmetric(self, root: Optional[TreeNode]) -> bool:
if not root:
return True
que = collections.deque()
que.append(root.left)
que.append(root.right)
while que:
# 每次从队列中连续取两个值进行下述判断
leftNode = que.popleft()
rightNode = que.popleft()
if not leftNode and not rightNode: # 左节点为空,右节点为空,则对称
continue
if not leftNode or not rightNode or leftNode.val != rightNode.val:
return False
que.append(leftNode.left) # 左节点的左孩子
que.append(rightNode.right) # 右节点的右孩子
que.append(leftNode.right) # 左节点的右孩子
que.append(rightNode.left) # 右节点的左孩子
return True
使用栈
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def isSymmetric(self, root: Optional[TreeNode]) -> bool:
if not root:
return True
st = [] # 栈
st.append(root.left)
st.append(root.right)
while st:
leftNode = st.pop()
rightNode = st.pop()
if not leftNode and not rightNode:
continue
if not leftNode or not rightNode or leftNode.val != rightNode.val:
return False
st.append(leftNode.left)
st.append(rightNode.right)
st.append(leftNode.right)
st.append(rightNode.left)
return True
100. 相同的树
题目:给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。
如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
完整代码如下
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def isSameTree(self, p: Optional[TreeNode], q: Optional[TreeNode]) -> bool:
if not p and not q: # 都为空
return True
elif not p or not q: # 一个为空,一个不为空
return False
elif p.val != q.val: # 都不为空,但是值不相等
return False
else: # 都不为空,值也相等,那就进行递归
return self.isSameTree(p.left, q.left) and self.isSameTree(p.right, q.right)
572. 另一棵树的子树
题目:给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在,返回 true ;否则,返回 false 。
二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点。tree 也可以看做它自身的一棵子树。
……待学
边栏推荐
- virtual address space
- BM13 determines whether a linked list is a palindrome
- DC-7靶场下载及渗透实战详细过程(DC靶场系列)
- Black cats take you learn Makefile article 13: a Makefile collection compile problem
- LeetCode Daily 2 Questions 02: Reverse the words in a string (1200 each)
- 今日睡眠质量记录75分
- LeetCode Daily Question (1573. Number of Ways to Split a String)
- leetcode:355. 设计推特
- Introduction to the use of counter instructions in Rockwell AB PLC RSLogix5000
- 68: Chapter 6: Develop article services: 1: Content sorting; article table introduction; creating [article] article services;
猜你喜欢
How to be a Righteous Hacker?What should you study?
LeetCode每日两题02:反转字符串中的单词 (均1200道)
Redis
Nodes in the linked list are flipped in groups of k
MySQL: MySQL Cluster - Principle and Configuration of Master-Slave Replication
unusual understanding
实例051:按位与
BM13 determines whether a linked list is a palindrome
uni-app微信小程序——下拉多选框
fme csmapreprojector转换器使用高程异常模型进行高程基准转换
随机推荐
阿里云新增三大高性能计算解决方案,助力生命科学行业快速发展
MySQL:MySQL的集群——主从复制的原理和配置
美味石井饭菜
PyQt5 窗口自适应大小
新一代网络安全防护体系的五个关键特征
August 10, 2022: Building Web Applications for Beginners with ASP.NET Core -- Creating Web UIs with ASP.NET Core
《DevOps围炉夜话》- Pilot - CNCF开源DevOps项目DevStream简介 - feat. PMC成员胡涛
金山云CEO王育林离职:正值冲刺港股之际 雷军曾送金砖
LeetCode每日两题01:反转字符串 (均1200道)方法:双指针
How to translate financial annual report, why choose a professional translation company?
2021 IDEA creates web projects
RecyclerView滑动监听
Glide缓存核心原理详解
VLAN huawei 三种模式
Glide监听Activity生命周期源码分析
音乐播放器(未完成版本)
MySQL Advanced Commands
ASCII、Unicode和UTF-8
VulnHub之DC靶场下载与DC靶场全系列渗透实战详细过程
Splunk中解决数据质量问题常见日期格式化