原创转载请注明出处:http://agilestyle.iteye.com/blog/2360924
method 1 —— 使用两个队列
use a queue to store elements and levels
keep dequeing elements until the associated levels equals to the desired level
print out elements and stop when queue is empty
method 2 —— 递归
recursion
keep track of current level versus desired level
print out element when current = desired
package org.fool.java.test;
import java.util.LinkedList;
import java.util.Queue;
public class TreeLevelPrintTest {
public static void main(String[] args) {
// 4
// 2 6
// 1 3 5 7
Tree myTree = new Tree(4);
myTree.left = new Tree(2);
myTree.right = new Tree(6);
myTree.left.left = new Tree(1);
myTree.left.right = new Tree(3);
myTree.right.left = new Tree(5);
myTree.right.right = new Tree(7);
// use method 1
printTreeLevel(myTree, 2); // 1 3 5 7
System.out.println();
printTreeLevel(myTree, 1); // 2 6
System.out.println();
printTreeLevel(myTree, 0); // 4
System.out.println();
// use method 2
printTreeLevel(myTree, 0, 2);
System.out.println();
printTreeLevel(myTree, 0, 1);
System.out.println();
printTreeLevel(myTree, 0, 0);
}
// method 1, use Queue
private static void printTreeLevel(Tree t, int desire) {
if (desire < 0) {
return;
}
// now define 2 queues, one to store tree nodes, the other for current levels
Queue<Tree> trees = new LinkedList<>();
Queue<Integer> levels = new LinkedList<>();
// start by pushing root node in the queue
trees.add(t);
levels.add(0);
// now define a loop to continue while the queue is not empty
while (!trees.isEmpty()) {
Tree temp = trees.poll();
int currentLevel = levels.poll();
if (temp == null) {
continue;
} else if (currentLevel == desire) {
System.out.print(temp.value + " ");
} else { // need to continue to its child tree nodes
trees.add(temp.left);
levels.add(currentLevel + 1);
trees.add(temp.right);
levels.add(currentLevel + 1);
}
}
}
// method 2, use recursion
private static void printTreeLevel(Tree t, int currentLevel, int desire) {
if(t == null || currentLevel > desire) {
return;
}
if(currentLevel == desire) {
System.out.print(t.value + " ");
} else {
// proceed to its left and right sub-trees
printTreeLevel(t.left, currentLevel + 1, desire);
printTreeLevel(t.right, currentLevel + 1, desire);
}
}
private static class Tree {
public int value;
public Tree left;
public Tree right;
public Tree(int value) {
this.value = value;
this.left = null;
this.right = null;
}
}
}
Console Output
Reference
https://www.youtube.com/watch?v=79fPL0F_1XA&index=43&list=PLlhDxqlV_-vkak9feCSrnjlrnzzzcopSG