package jianzhiOffer;

import java.util.ArrayList;

/**
 * 从上往下打印出二叉树的每个节点,同层节点从左至右打印。
 * 
 * @author user 思路:本题中我们利用层序遍历的思想,首先将树中所有节点 按照一层从左到右依次保存到ArrayList中,然后在逐一取出
 *         节点的值添加到集合中,最后返回集合。
 */

class TreeNode3 {
	int val = 0;
	TreeNode3 left = null;
	TreeNode3 right = null;

	public TreeNode3(int val) {
		this.val = val;

	}

}

public class ch22 {

	int i = 0;
	int count = 0;
	boolean flag = true;
	ArrayList arr = new ArrayList<>();

	public ArrayList PrintFromTopToBottom(TreeNode3 root) {
		ArrayList node = new ArrayList<>();
		if (root != null) {
			node.add(root);
			while (flag) {
				if (root.left != null) {
					node.add(root.left);
					count++;
				}
				if (root.right != null) {
					node.add(root.right);
					count++;
				}
				// i总是一层一层从左往右的移动
				if (i < count) {
					i++;
					root = node.get(i);
				} else {
					flag = false;
				}
			}
		}
		for (int i = 0; i < node.size(); i++) {
			arr.add(node.get(i).val);
		}
		return arr;
	}
}