从上往下打印出二叉树的每个节点,同层节点从左至右打印。
class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
方式一:
使用两个数组 一个数组存放每个节点的值
一个数组存放着树的节点
public class PrintTree {
public static void main(String[] args) {
PrintTree printTree = new PrintTree();
TreeNode root = new TreeNode(1);
root.left = new TreeNode(2);
root.right = new TreeNode(3);
root.left.left = new TreeNode(4);
root.left.right = new TreeNode(5);
root.right.right = new TreeNode(6);
System.out.println(printTree.PrintFromTopToBottom(root));
}
public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
ArrayList<Integer> treeList = new ArrayList<Integer>();
ArrayList<TreeNode> treeNodes = new ArrayList<TreeNode>();
if (root==null) {
return treeList;
}
treeNodes.add(root);
for (int i = 0; i < treeNodes.size(); i++) {
TreeNode treeNode = treeNodes.get(i);
treeList.add(treeNode.val);
if (treeNode.left!=null) {
treeNodes.add(treeNode.left);
}
if (treeNode.right!=null) {
treeNodes.add(treeNode.right);
}
}
return treeList;
}
}
方式二:
使用一个数组存放每个节点的值
使用队列存放树的节点,节点的存放顺序按照从左到右 根 根左 根右
public class PrintTree {
public static void main(String[] args) {
PrintTree printTree = new PrintTree();
TreeNode root = new TreeNode(1);
root.left = new TreeNode(2);
root.right = new TreeNode(3);
root.left.left = new TreeNode(4);
root.left.right = new TreeNode(5);
root.right.right = new TreeNode(6);
System.out.println(printTree.PrintFromTopToBottom(root));
}
public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
ArrayList<Integer> treeList = new ArrayList<Integer>();
Queue<TreeNode> treeNodes = new LinkedList<TreeNode>();
if (root==null) {
return treeList;
}
//将节点添加到队列中
treeNodes.offer(root);
while(!treeNodes.isEmpty()){
//取出队列中的第一个元素
TreeNode node = treeNodes.poll();
treeList.add(node.val);
if (node.left!=null) {
treeNodes.offer(node.left);
}
if (node.right!=null) {
treeNodes.offer(node.right);
}
}
return treeList;
}
}