package com.interview.algorithms.tree; import com.interview.basics.model.collection.queue.LinkedQueue; import com.interview.basics.model.collection.queue.Queue; import com.interview.basics.model.tree.BinaryTreeNode; import java.util.ArrayList; import java.util.List; /** * Created_By: stefanie * Date: 14-9-26 * Time: 下午3:37 */ public class C5_25_PrintBinaryTreeLayer { public static void print(BinaryTreeNode tree){ Queue<BinaryTreeNode> queue = new LinkedQueue<>(); queue.push(tree); queue.push(null); while(!queue.isEmpty()){ BinaryTreeNode obj = queue.pop(); if(obj == null){ if(queue.size() > 0) { queue.push(null); System.out.println(); continue; } else return; } System.out.printf("%s ", obj.value.toString()); if(obj.left != null) queue.push(obj.left); if(obj.right != null) queue.push(obj.right); } } public static List<Object> printRecursive(BinaryTreeNode node, int n){ List<Object> objs = new ArrayList<>(); printRecursive(node, n, objs); return objs; } private static void printRecursive(BinaryTreeNode node, int n, List<Object> objs){ if(node == null || n < 0) return; if(n == 0){ objs.add(node.value); } else { if(node.left != null) printRecursive(node.left, n - 1, objs); if(node.right != null) printRecursive(node.right, n - 1, objs); } } public static List<Object> print(BinaryTreeNode tree, int n){ List<Object> objs = new ArrayList<>(); Queue<BinaryTreeNode> queue = new LinkedQueue<>(); queue.push(tree); queue.push(null); while(n > 0 && !queue.isEmpty()){ BinaryTreeNode obj = queue.pop(); if(obj == null){ if(queue.size() > 0) { queue.push(null); n--; continue; } else return objs; } //System.out.printf("%s ", obj.value.toString()); if(obj.left != null) queue.push(obj.left); if(obj.right != null) queue.push(obj.right); } while(!queue.isEmpty()) { if(queue.peek() == null) break; objs.add(queue.pop().value); } return objs; } }