按之字形顺序打印二叉树(Java实现)

来源:互联网 发布:缴费一站通软件 编辑:程序博客网 时间:2024/06/11 18:50

本题为剑指offer面试题61

牛客网测试地址:https://www.nowcoder.com/questionTerminal/91b69814117f4e8097390d107d2efbe0

[编程题]按之字形顺序打印二叉树
  • 热度指数:33419  时间限制:1秒  空间限制:32768K
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。

Java code:

package go.jacob.day612;import java.util.ArrayList;import java.util.Stack;public class Demo1 {public ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {//result用来存储结果ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();if (pRoot == null)return result;//line存取每一行数字ArrayList<Integer> line = new ArrayList<Integer>();//建立两个堆栈Stack<TreeNode> stack1 = new Stack<TreeNode>();Stack<TreeNode> stack2 = new Stack<TreeNode>();boolean flag = true;TreeNode node;stack1.push(pRoot);while (!stack1.isEmpty() || !stack2.isEmpty()) {//如果奇数行,正序打印if (flag) {while (!stack1.isEmpty()) {node = stack1.pop();line.add(node.val);//先存left子节点,再存right子节点if (node.left != null) {stack2.push(node.left);}if (node.right != null) {stack2.push(node.right);}//当堆栈为空,说明该行节点遍历完毕if (stack1.isEmpty()) {result.add(line);line = new ArrayList<Integer>();}}//偶数行,逆序打印} else {while (!stack2.isEmpty()) {node = stack2.pop();line.add(node.val);//先存right子节点,再存left子节点if (node.right != null) {stack1.push(node.right);}if (node.left != null) {stack1.push(node.left);}//当堆栈为空,说明该行节点遍历完毕if (stack2.isEmpty()) {result.add(line);line = new ArrayList<Integer>();}}}flag = !flag;}return result;}class TreeNode {int val = 0;TreeNode left = null;TreeNode right = null;public TreeNode(int val) {this.val = val;}}}


原创粉丝点击