从上往下打印二叉树
题目描述
从上往下打印出二叉树的每个节点,同层节点从左至右打印
解题思路:
一层一层的往下遍历,每层中的所有节点,都加入到一个list当中,带入到下一次方法递归循环当中。
如果list为空,则说明遍历完了。
public static void main(String[] args) {
Solution solution = new Solution();
TreeNode treeNode1 = new TreeNode(1);
TreeNode treeNode2 = new TreeNode(2);
TreeNode treeNode3 = new TreeNode(3);
TreeNode treeNode4 = new TreeNode(4);
TreeNode treeNode5 = new TreeNode(5);
treeNode1.left = treeNode2;
treeNode2.left = treeNode3;
treeNode3.left = treeNode4;
treeNode1.right = treeNode5;
ArrayList<Integer> arrayList = solution.PrintFromTopToBottom(treeNode1);
System.out.println(arrayList.size());
}
public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
ArrayList<Integer> list = new ArrayList<>();
if (root == null) {
return list;
}
ArrayList<TreeNode> treeNodeList = new ArrayList<>();
treeNodeList.add(root);
PrintAdd(treeNodeList, list);
return list;
}
public void PrintAdd(ArrayList<TreeNode> treeNodeList, ArrayList<Integer> list) {
if (treeNodeList.size() == 0) {
return;
}
ArrayList<TreeNode> treeNodeListNew = new ArrayList<>();
for (TreeNode treeNode : treeNodeList) {
list.add(treeNode.val);
if (treeNode.left != null) {
treeNodeListNew.add(treeNode.left);
}
if (treeNode.right != null) {
treeNodeListNew.add(treeNode.right);
}
}
PrintAdd(treeNodeListNew, list);
}