【剑指offer】从上往下打印二叉树
从上往下打印二叉树
http://www.nowcoder.com/questionTerminal/7fe2212963db4790b57431d9ed259701
题目描述
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
1、思路分析
从左至右的顺序打印联想到队列这种数据结构,但仍需注意入队和出队的逻辑。首先将根节点添加进队列,接着进行当队列不为空的循环,在循环里,先弹出队首元素,并将其保存在值TreeNode类型的t中,因为后续我们还需获得t的左右结点情况,将t添加进list中,并将t的左右结点依次入队,至此,一次循环的操作结束。此外,还需注意队列这种数据结构的基本操作。
2、代码
import java.util.ArrayList; import java.util.Deque; import java.util.LinkedList; /** 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) { ArrayList<Integer> list = new ArrayList<>(); if(root == null) return list; Deque<TreeNode> deque = new LinkedList<>(); deque.add(root); while(!deque.isEmpty()) { TreeNode t = deque.pop(); // 注意需要保存一次弹出的结点 list.add(t.val); if(t.left != null) deque.add(t.left); if(t.right != null) deque.add(t.right); } return list; } }