📌  相关文章
📜  交替打印二叉搜索树的顶层顺序和反向底层顺序的节点(1)

📅  最后修改于: 2023-12-03 15:21:44.705000             🧑  作者: Mango

交替打印二叉搜索树的顶层顺序和反向底层顺序的节点

本文介绍如何实现交替打印二叉搜索树的顶层顺序和反向底层顺序的节点。在实现这个功能前,需要先了解以下几个概念:

  • 二叉搜索树(Binary Search Tree):一种特殊的二叉树,它的每个节点都不小于左子树中的任意节点,不大于右子树中的任意节点。
  • 层序遍历(Level Order Traversal):按照从上到下、从左到右的顺序遍历二叉树的每个节点。
  • 底层顺序:指的是从下往上、从右往左的顺序。
实现思路

我们可以借助两个栈来实现交替打印二叉搜索树的顶层顺序和反向底层顺序的节点。其中一个栈用于存储当前层的节点,另一个栈用于存储下一层的节点。每次打印完当前层的节点后,再将下一层的节点逆序存入另一个栈中。这样就能实现交替打印顶层顺序和反向底层顺序的节点。

代码实现

下面是用Python实现交替打印二叉搜索树的顶层顺序和反向底层顺序的节点的代码:

class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

def zigzagLevelOrder(root: TreeNode) -> list:
    if not root:
        return []
    res = []
    stack1, stack2 = [root], []
    flag = True
    while stack1:
        cur_level = []
        for i in range(len(stack1)):
            node = stack1.pop()
            cur_level.append(node.val)
            if flag:
                if node.left:
                    stack2.append(node.left)
                if node.right:
                    stack2.append(node.right)
            else:
                if node.right:
                    stack2.append(node.right)
                if node.left:
                    stack2.append(node.left)
        res.append(cur_level)
        stack1, stack2 = stack2, stack1
        flag = not flag
    return res
代码说明
  • 实现 zigzagLevelOrder 函数,该函数接收一个 TreeNode 类型的参数 root,表示根节点,并返回一个列表,该列表按照节点的交错顺序存储的数值。
  • 开辟两个栈 stack1stack2,其中 stack1 存储当前层的节点,stack2 存储下一层的节点。
  • 初始化布尔变量 flag,用于表示当前层的节点是从左到右还是从右到左。
  • 遍历二叉搜索树,如果节点 node 存在,则将其值存入 cur_level 列表中,同时将其左右子节点存入栈 stack2 中。
  • 遍历完当前层的节点后,将 stack1stack2交换,并将 flag 取反,以便存储下一层的节点时,从反方向存储。
  • 返回存储节点数值的二维列表 res
总结

本文介绍了如何用Python实现交替打印二叉搜索树的顶层顺序和反向底层顺序的节点。实现思路比较简单,主要是通过两个栈和一个标志位来实现。对于新手来说,可以通过此文章的学习,快速掌握这个问题的解决方法,对于老手来说,也可对算法进行更深入的理解和掌握。