题:从上往下打印出二叉树的每个节点,同层节点从左至右打印。
思路:请看清楚这道题,同层节点从左至右打印,现有的二叉树的前序、中序、后序遍历都是不满足题目的条件的。 这里可以借助队列来实现,从二叉树的根节点开始,写个循环依次按照从左往右的顺序把节点添加到队列里,一边添加的同时,一边从队列中取队列的第一个节点,取完之后就删除这个节点,直到队列为空,循环结束。由于队列的特性是先进先出,所以可以保住打印的时候是从左至右的。因为循环的结束条件是队列为空,所以不用担心每次循坏只取队列的一个节点是否不够。
代码:
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
if(root == null)
return new ArrayList();//判题需要,若返回null,会报空指针
ArrayList<Integer> result = new ArrayList<>();
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while (!queue.isEmpty()){
TreeNode currentNode = queue.poll();
result.add(currentNode.val);
if(currentNode.left != null)
queue.offer(currentNode.left);
if(currentNode.right != null)
queue.offer(currentNode.right);
}
return result;
}
}
呕心沥血写出来的,转载请一定注明出处!