package java_jianzhioffer_algorithm;
/**
* 题目:从上往下打印出二叉树的每个节点,同层节点从左至右打印。
* @author hexiaoli
* 思考:
* 1)使用一个队列,先将根节点放入队列,
* 每一次取出队列头节点的时候,如果该节点有子节点,则把该节点的子节点加到队列的末尾,
* 继续取出队列头结点,直至队列中所有的节点都取出为止。
*
*/
import java.util.ArrayList;
class TreeNodepftb {
int val = 0;
TreeNodepftb left = null;
TreeNodepftb right = null;
public TreeNodepftb(int val) {
this.val = val;
}
}
public class PrintFromTopToBottom {
public static ArrayList<Integer> printFromTopToBottom(TreeNodepftb root){
ArrayList<Integer> result = new ArrayList<>();
ArrayList<TreeNodepftb> queue = new ArrayList<>();
// Queue<TreeNode> queue = new LinkedList<>();
if(root == null ) {
return result;
}
// 在队列中加入根节点
queue.add(root);
while(!queue.isEmpty()) {
// 取出队列头结点
TreeNodepftb temp = queue.remove(0);
//若用Queue,TreeNode node = queue.poll();
result.add(temp.val);
System.out.print(temp.val+" ");
// 如果取出的队列头结点有左子节点,则加入到队列尾,offer
if(temp.left !=null) {
queue.add(temp.left);
}
// 如果取出的队列头结点有右子节点,则加入到队列尾
if(temp.right !=null) {
queue.add(temp.right);
}
}
System.out.println();
return result;
}
//实现分层打印
public static ArrayList<Integer> printFromTopToBottom2(TreeNodepftb root){
ArrayList<Integer> result = new ArrayList<>();
ArrayList<TreeNodepftb> queue = new ArrayList<>();
// Queue<TreeNode> queue = new LinkedList<>();
if(root == null ) {
return result;
}
// 在队列中加入根节点
queue.add(root);
int nextLevel = 0;
int toBePrint = 1;
while(!queue.isEmpty()) {
// 取出队列头结点
TreeNodepftb temp = queue.remove(0);
//若用Queue,TreeNode node = queue.poll();
result.add(temp.val);
System.out.print(temp.val+" ");
--toBePrint;
// 如果取出的队列头结点有左子节点,则加入到队列尾,offer
if(temp.left !=null) {
queue.add(temp.left);
nextLevel++;
}
// 如果取出的队列头结点有右子节点,则加入到队列尾
if(temp.right !=null) {
queue.add(temp.right);
nextLevel++;
}
if(toBePrint == 0) {
System.out.print('\n');
toBePrint = nextLevel;
nextLevel=0;
}
}
return result;
}
public static void main(String[] args) {
TreeNodepftb t1 = new TreeNodepftb(4);
TreeNodepftb t2 = new TreeNodepftb(2);
TreeNodepftb t3 = new TreeNodepftb(6);
TreeNodepftb t4 = new TreeNodepftb(1);
TreeNodepftb t5 = new TreeNodepftb(3);
TreeNodepftb t6 = new TreeNodepftb(5);
TreeNodepftb t7 = new TreeNodepftb(7);
t1.left=t2;
t1.right=t3;
t2.left=t4;
t2.right=t5;
t3.left=t6;
t3.right=t7;
printFromTopToBottom(t1);
printFromTopToBottom2(t1);
}
}
剑指offer(22)从上往下打印二叉树
猜你喜欢
转载自blog.csdn.net/hxl0925/article/details/90032835
今日推荐
周排行