1从上往下打印二叉树

题目描述:

从上往下打印出二叉树的每个节点,同层节点从左至右打印。
例如,以下二叉树层次遍历的结果为:1,2,3,4,5,6,7


解析:

public ArrayListInteger> PrintFromTopToBottom(TreeNode root) { QueueTreeNode> queue = new LinkedList>(); ArrayListInteger> ret = new ArrayList>(); queue.add(root); //1 while (!queue.isEmpty()) { int cnt = queue.size(); while (cnt-- > 0) { TreeNode t = queue.poll(); //1 if (t == null) continue; ret.add(t.val); //1 queue.add(t.left); //2 queue.add(t.right);//3 } } return ret; } 

2把二叉树打印成多行(和上题很相似,不同在于1,23,4567的打印)

解析:

ArrayListArrayListInteger>> Print(TreeNode pRoot) { 
    ArrayListArrayListInteger>> ret = new ArrayList>();
    QueueTreeNode> queue = new LinkedList>(); 
    queue.add(pRoot); 
    while (!queue.isEmpty()) { 
        ArrayListInteger> list = new ArrayList>();
        int cnt = queue.size(); 
        while (cnt-- > 0) {
         TreeNode node = queue.poll();
         if (node == null)
             continue;
         list.add(node.val); 
        queue.add(node.left); 
        queue.add(node.right);
     } 
        if (list.size() != 0)
         ret.add(list);
    } 
    return ret;
 } 

3之字形打印二叉树

题目描述

请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,
第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行
以此类推。

解析:

public ArrayListArrayListInteger>> Print(TreeNode pRoot) { 
    ArrayListArrayListInteger>> ret = new ArrayList>(); 
    QueueTreeNode> queue = new LinkedList>();
    queue.add(pRoot);
    boolean reverse = false; 
    while (!queue.isEmpty()) {
       ArrayListInteger> list = new ArrayList>(); 
       int cnt = queue.size(); 
       while (cnt-- > 0) { 
        TreeNode node = queue.poll();
        if (node == null)
         continue; 
        list.add(node.val);
        queue.add(node.left);
        queue.add(node.right);
 } 
       if (reverse) 
       Collections.reverse(list);
       reverse = !reverse; 
       if (list.size() != 0)
       ret.add(list);
     }
     return ret; 
}