leedcode 相同的树
自己写的有问题 即使先序+中序的结果一样 也不能确定同一棵树
# 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 __init__(self): self.pre_res = list() self.in_res = list() def preorder(self, node): if node: self.pre_res.append(node.val) self.preorder(node.left) self.preorder(node.right) def inorder(self, node): if node: self.inorder(node.left) self.in_res.append(node.val) self.inorder(node.right) def isSameTree(self, p, q): self.pre_res = [] # 清空先前的结果 self.in_res = [] # 清空先前的结果 self.preorder(p) p_pre = self.pre_res self.pre_res = [] # 为下一次遍历清空结果 self.inorder(p) p_in = self.in_res self.in_res = [] # 为下一次遍历清空结果 self.preorder(q) q_pre = self.pre_res self.pre_res = [] # 为下一次遍历清空结果 self.inorder(q) q_in = self.in_res self.in_res = [] # 为下一次遍历清空结果 return p_pre == q_pre and p_in == q_in
gpt提供的递归:
class Solution: def isSameTree(self, p, q): # 如果两个节点都为空,则认为相同 if not p and not q: return True # 如果一个节点为空而另一个不为空,或者节点的值不相等,则认为不相同 if not p or not q or p.val != q.val: return False # 递归比较左右子树 return self.isSameTree(p.left, q.left) and self.isSameTree(p.right, q.right)
使用队列层层迭代判断
class Solution: def isSameTree(self, p: TreeNode, q: TreeNode) -> bool: # 初始化队列 queue = [p, q] while queue: # 从队列中取出两个节点 pNode = queue.pop(0) qNode = queue.pop(0) # 若当前节点为空,则继续循环 if pNode == None and qNode == None: continue # 如果其中一个节点为空,另一个不为空,则一定不相同 if (pNode == None and qNode != None) or (pNode != None and qNode == None): return False # 如果两个节点皆不为空,但是节点的值不同,则一定不相同 if pNode.val != qNode.val: return False # pNode 节点的左孩子和 qNode 节点的左孩子入队列 queue.append(pNode.left) queue.append(qNode.left) # pNode 节点的右孩子和 qNode 节点的右孩子入队列 queue.append(pNode.right) queue.append(qNode.right) return True
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)