Q21_按之字形顺序打印二叉树

来源:互联网 发布:cpda数据分析师 含金量 编辑:程序博客网 时间:2024/06/05 16:19

题目描述

请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。

package Proxy;import java.util.ArrayList;import java.util.Stack;class TreeNode {int val = 0;TreeNode left = null;TreeNode right = null;public TreeNode(int val) {this.val = val;}}public class Q21_按之字形顺序打印二叉树 {class Solution {public ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {if (pRoot == null) {return new ArrayList<ArrayList<Integer>>();}// 用两个栈分别存放奇数行的节点和偶数行的节点Stack<TreeNode> stack1 = new Stack<TreeNode>(); // 奇数行(出栈的顺序对应本行节点的从左到右)Stack<TreeNode> stack2 = new Stack<TreeNode>(); // 偶数行(出栈的顺序对应本行节点的从右到左)// 结果列表ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();// 首先先将pRoot节点入stack1stack1.push(pRoot);while (stack1.isEmpty() || stack2.isEmpty()) {// 如果两个栈同时都为空,则结束if (stack1.isEmpty() && stack2.isEmpty()) {break;}// 如果stack1不空,stack2空if (!stack1.isEmpty()) {// stack1全部出栈ArrayList<Integer> hang = new ArrayList<Integer>();while (!stack1.isEmpty()) {TreeNode curNode = stack1.pop();hang.add(curNode.val);if (curNode.left != null) {stack2.push(curNode.left);}if (curNode.right != null) {stack2.push(curNode.right);}}result.add(hang);}// 如果stack2不空,stack1空if (!stack2.isEmpty()) {// stack2全部出栈ArrayList<Integer> hang = new ArrayList<Integer>();while (!stack2.isEmpty()) {TreeNode curNode = stack2.pop();hang.add(curNode.val);if (curNode.right != null) {stack1.push(curNode.right);}if (curNode.left != null) {stack1.push(curNode.left);}}result.add(hang);}}// 处理完毕,返回return result;}}}