Python 程序检查树的中序遍历序列是否为回文
假设我们有一棵二叉树,其中每个节点包含一个 0-9 的数字,我们需要检查其中序遍历是否为回文。
因此,如果输入类似于
则输出将为 True,因为其中序遍历为 [2,6,10,6,2]。
为了解决这个问题,我们将遵循以下步骤 -
- 如果根节点为空,则
- 返回 True
- stack := 新栈
- curr := 根节点
- inorder := 新列表
- 当栈不为空或 curr 不为空时,执行以下操作
- 当 curr 不为空时,执行以下操作
- 将 curr 推入栈
- curr := curr 的左节点
- node := 从栈中弹出的元素
- 将 node 的值插入 inorder 列表末尾
- curr := node 的右节点
- 当 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
广告