package Second; /** * 题目: * 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印, * 第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。 */ import java.util.ArrayList; import java.util.Stack; public class P176_PrintTreeByZ { public ArrayList<ArrayList<Integer>> PrintTreeByZ(TreeNode pRoot){ //存放返回结果 ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>(); //判断树是否为空 if (pRoot == null) { return result; } //存放奇数层结点 Stack<TreeNode> s1 = new Stack<>(); s1.add(pRoot); //存放偶数层结点 Stack<TreeNode> s2 = new Stack<>(); //记录层数 int count = 1; while (!s1.empty() || !s2.empty()) { if (count % 2 != 0) { ArrayList<Integer> list = new ArrayList<>(); while (!s1.empty()) { TreeNode node = s1.pop(); if (node != null) { list.add(node.val); s2.push(node.left); s2.push(node.right); } } if (!list.isEmpty()) { result.add(list); count++; } } else { ArrayList<Integer> list = new ArrayList<>(); while (!s2.empty()) { TreeNode node = s2.pop(); if (node != null) { list.add(node.val); s1.push(node.right); s1.push(node.left); } } if (!list.isEmpty()) { result.add(list); count++; } } } return result; } public static void main(String[] args) { TreeNode root = new TreeNode(1); TreeNode node2 = new TreeNode(2); root.left = node2; TreeNode node3 = new TreeNode(3); root.right = node3; TreeNode node4 = new TreeNode(4); node2.left = node4; TreeNode node5 = new TreeNode(5); node2.right = node5; TreeNode node6 = new TreeNode(6); node3.left = node6; TreeNode node7 = new TreeNode(7); node3.right = node7; TreeNode node8 = new TreeNode(8); node4.left = node8; TreeNode node9 = new TreeNode(9); node4.right = node9; TreeNode node10 = new TreeNode(10); node5.left = node10; TreeNode node11 = new TreeNode(11); node5.right = node11; TreeNode node12 = new TreeNode(12); node6.left = node12; TreeNode node13 = new TreeNode(13); node6.right = node13; TreeNode node14 = new TreeNode(14); node7.left = node14; TreeNode node15 = new TreeNode(15); node7.right = node15; P176_PrintTreeByZ test = new P176_PrintTreeByZ(); ArrayList<ArrayList<Integer>> result = new ArrayList<>(); result = test.PrintTreeByZ(root); System.out.print(result); } }
剑指offer:按之字形打印二叉树(java)
猜你喜欢
转载自blog.csdn.net/Sunshine_liang1/article/details/82859382
今日推荐
周排行