题目:
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
思路:
层次遍历二叉树,并记录出队结点所在层数
Java
package nowcoder;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
public class S60_BTreePrint {
public ArrayList<ArrayList<Integer>> print(TreeNode root){
ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();
if (root == null)
return list;
Queue<TreeNode> queue = new LinkedList<TreeNode>();
queue.offer(root);
int layerCount = 1;
int layer = 1;
int count = 0;
ArrayList<Integer> temp = new ArrayList<Integer>();
while (!queue.isEmpty()){
TreeNode out = queue.poll();
count++;
temp.add(out.val);
if (out.left != null)
queue.offer(out.left);
if (out.right != null)
queue.offer(out.right);
if (count == layerCount){
layer++;
layerCount = queue.size();
count = 0;
list.add(temp);
temp = new ArrayList<Integer>();
}
}
return list;
}
public static void main(String[] args){
S60_BTreePrint s60 = new S60_BTreePrint();
PrintTreeLayer p = new PrintTreeLayer();
Integer[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
TreeNode root = p.arrayToTree(array, 0);
System.out.println(s60.print(root));
}
}
结果:
[[1], [2, 3], [4, 5, 6, 7], [8, 9, 10, 11]]
Python
import PrintTreeLayer
class BTreePrint:
def print(self, root):
if not root:
return []
nodeQueue = [root]
result = []
while nodeQueue:
res = []
nextQueue = []
for i in nodeQueue:
res.append(i.val)
if i.left:
nextQueue.append(i.left)
if i.right:
nextQueue.append(i.right)
nodeQueue = nextQueue
result.append(res)
return result
if __name__ == '__main__':
test = BTreePrint()
p = PrintTreeLayer.PrintTreeLayer()
array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
root = p.arrayToTree(array, 0)
print(test.print(root))