首页 > 解决方案 > 如何打印已添加到队列中的二叉树中节点的值?

问题描述

我正在编写代码来解决以下 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>])

有什么想法可以打印队列以显示节点值吗?

标签: pythonbinary-tree

解决方案


最优雅的是__repr__为 TreeNode 类定义函数,例如

    def __repr__(self):
        
        return f"Node {self.val}"

这决定了如何打印 TreeNode 类。在这种情况下,您会得到

deque([Node 2, Node 3])

然后,您还可以根据需要对其进行调整,例如,除了值之外,您还想左右打印。


推荐阅读