从上到下打印二叉树(层次遍历)
/* 剑指offer32-1:从上到下打印二叉树
* 题目描述:从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。(层序遍历)
* 解题思路:借助栈来实现,将树的结点依次入栈,出栈时输出并将所有的孩子入栈。
* 测试:null;
* */
public class CongShangDaoXiaDaYinErChaShu {
public static void main(String[] args) {
TreeNode root = new TreeNode(3);
root.left=new TreeNode(9);
root.right=new TreeNode(20);
root.right.left=new TreeNode(15);
root.right.right=new TreeNode(7);
CongShangDaoXiaDaYinErChaShuSolution solution = new CongShangDaoXiaDaYinErChaShuSolution();
TreeNode a = new TreeNode(1);
a.left = new TreeNode(2);
int[] result = solution.levelOrder(a);
for (int i : result) {
System.out.print(i+" ");
}
}
}
class CongShangDaoXiaDaYinErChaShuSolution {
Queue<TreeNode> queue = new LinkedList<TreeNode>();
public int[] levelOrder(TreeNode root) {
if(root==null) return new int[0];
int [] result = new int[firstOrder(root)];
int i = 0;
//根结点入对
queue.add(root);
while(!queue.isEmpty()) {
TreeNode treeNode = queue.poll();
result[i] = treeNode.val;
i++;
if(treeNode.left!=null) queue.add(treeNode.left);
if(treeNode.right!=null) queue.add(treeNode.right);
}
return result;
}
public int firstOrder(TreeNode node) {
if(node==null) return 0;
int i=0;
i++;
i=i+firstOrder(node.left);
i=i+firstOrder(node.right);
return i;
}
}