用 Python 编写程序检查树的中序序列是否为回文

pythonserver side programmingprogramming更新于 2026/2/2 10:20:17

假设我们有一个二叉树,每个节点包含一个 0-9 的数字,我们必须检查它的中序遍历是否为回文。

因此,如果输入如下

则输出将为 True,因为它的中序遍历为 [2,6,10,6,2]。

要解决这个问题,我们将遵循以下步骤 −

  • 如果 root 为空,则
    • 返回True
  • stack := 一个新的堆栈
  • curr := root
  • inorder := 一个新的列表
  • 当 stack 不为​​空或 curr 不为 null 时,执行
    • 当 curr 不为 null 时,执行
      • 将 curr 推入堆栈
      • curr := curr 的左侧
    • node := 从堆栈弹出的元素
    • 在 inorder 的末尾插入节点的值
    • curr := 节点的右侧
  • 当 inorder 与 inorder 的反向顺序相同时返回 true,否则返回 false。

让我们看看下面的实现以便更好地理解 −

示例

class TreeNode:
   def __init__(self, data, left = None, right = None):
      self.val = data
      self.left = left
      self.right = right
class Solution:
   def solve(self, root):
      if not root:
         return True
      stack = []
      curr = root
      inorder = []
      while stack or curr:
         while curr:
            stack.append(curr)
            curr = curr.left
         node = stack.pop() inorder.append(node.val)
         curr = node.right
      return inorder == inorder[::-1]
ob = Solution()
root = TreeNode(6)
root.left = TreeNode(2)
root.right = TreeNode(6)
root.right.left = TreeNode(10)
root.right.right = TreeNode(2)
print(ob.solve(root))

输入

root = TreeNode(6)
root.left = TreeNode(2)
root.right = TreeNode(6)
root.right.left = TreeNode(10)
root.right.right = TreeNode(2)

输出

True

相关文章


有用资源