python - 如何打印已添加到队列中的二叉树中节点的值?
问题描述
我正在编写代码来解决以下 Leetcode 解决方案: https ://leetcode.com/problems/symmetric-tree/
#THIS FIRST CHUNK OF CODE IS JUST TO BUILD A BINARY TREE!
from collections import deque
class TreeNode:
def __init__(self, val):
self.val = val
self.left = None
self.right = None
def insert(self, val):
# Compare the new value with the parent node
if self.val:
if val <= self.val:
if self.left is None:
self.left = TreeNode(val)
else:
self.left.insert(val)
elif val >= self.val:
if self.right is None:
self.right = TreeNode(val)
else:
self.right.insert(val)
else:
self.val = val
def PrintTree(self):
if self.left:
self.left.PrintTree()
print(self.val),
if self.right:
self.right.PrintTree()
#THIS IS THE CODE TO SOLVE THE LEETCODE PROBLEM
class Solution:
def isSymmetric(self, root: TreeNode) -> bool:
queue = deque()
if not root:
return []
if root.left:
queue.append(root.left)
if root.right:
queue.append(root.right)
right_subt = []
left_subt = []
while queue:
level_length = len(queue)
for _ in range(level_length // 2):
node = queue.popleft()
left_subt.append(node.val)
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
for _ in range((level_length - (level_length // 2))):
node = queue.popleft()
right_subt.append(node.val)
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
print(queue)
if left_subt != right_subt.reverse():
return False
return True
root = TreeNode(1)
root.insert(2)
root.insert(2)
root.insert(3)
root.insert(4)
root.insert(4)
root.insert(3)
root.PrintTree()
x=Solution()
Solution.isSymmetric(x,root)
我的代码第一次失败input: root = [1,2,2,3,4,4,3]
;它应该return True
但它是retuning False
,我正在尝试调试它。
在我上面的代码中,我使用类 TreeNode 构建了一个树,并尝试打印队列,但是我得到的是:deque([<__main__.TreeNode object at 0x7fe9381dc340>, <__main__.TreeNode object at 0x7fe9381dc820>])
有什么想法可以打印队列以显示节点值吗?
解决方案
最优雅的是__repr__
为 TreeNode 类定义函数,例如
def __repr__(self):
return f"Node {self.val}"
这决定了如何打印 TreeNode 类。在这种情况下,您会得到
deque([Node 2, Node 3])
然后,您还可以根据需要对其进行调整,例如,除了值之外,您还想左右打印。
推荐阅读
- excel - 如何将excel中的图片复制到PPT的形状?
- python - 验证集上的 CNN 过拟合提高了测试集的性能
- python - 在 Tensorboard 中为两个不同的图表设置双轴
- javascript - 加载本地环境变量以在 NPM 脚本中使用
- sql - Oracle SQL 使用 like 连接并强制转换为 varchar2
- python - 通过 .loc 从聚合中添加新列会返回 NaN
- javascript - Javascript:用 html 字符串中的正则表达式替换图像名称
- angular - 角度拖放:如何克隆元素,拖动新克隆的元素
- r - 使用 ggragplot 制作刻面
- c++ - FreeType 库不与教程代码一起显示