题目描述
请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。例如,按之字形顺序打印下图二叉树的结果为:
题目分析
按之字形顺序打印二叉树需要两个栈。我们在打印某一层的节点时,把下一层的子节点保存到相应的栈里如果当前打印的是奇数层(第一层、第三层等),则先保存左子节点再保存右子节点到第一个栈里;如果当前打印的是偶数层(第二层、第四层等),则先保存右子节点再保存左子节点到第二个栈里。
你可能会疑惑为什么需要两个栈。我们看看如果只有一个栈会有哪些问题。在打印根节点的时候,先后把节点2和节点3保存到里。接下来打印节点3。在打印节点3时,把它的两个子节点6和7保存到栈里。此时由于节点7位于栈顶,接下来将打印节点7,而不是节点2。为了避免这个问题,节点6和节点7要保存到另一个栈里。
代码实现
代码解释
上述代码定义了两个栈levels[0]和levels[1]。在打印一个栈里的节点时,它的子节点保存到另一个栈里。当一层所有节点都打印完毕时,交换这两个栈并继续打印下一层。