题目描述
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
解题思路
就是二叉树的层序遍历,用队列来实现。我们需要两个变量,一个start记录当前层已经打印的节点个数,一个end记录前当层所有的节点个数,当 start == end 时,表时当前层遍历完了,就可以开始下一层遍历。
参考代码
Java
import java.util.ArrayList;
import java.util.Queue;
import java.util.LinkedList;
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer> >();
// 边界
if(pRoot == null)
return res;
ArrayList<Integer> temp = new ArrayList<Integer>(); // 每行的结果
Queue<TreeNode> layer = new LinkedList<TreeNode>(); // 队列
layer.offer(pRoot);//第一次运行 先添加根结点
int start = 0, end = 1; // 使用开始与结束结束控制每一行,第一行长度为1(一个根)
while(!layer.isEmpty()){
TreeNode node = layer.poll(); // 弹出当前层
temp.add(node.val); // 添加道每一行的ArrayList中
start ++; // 移动start
if(node.left != null) // 开始添加下一层(从左到右添加)
layer.add(node.left);
if(node.right != null)
layer.add(node.right);
if(start == end){
start = 0;
res.add(temp);
temp = new ArrayList<Integer>(); // 新建一层
end = layer.size();
}
}
return res;
}
}
Python
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
# 返回二维列表[[1,2],[4,5]]
def Print(self, pRoot):
# write code here
# 结果,每行的结果,
res, temp, layer,start, end = [],[],[],0,1
if not pRoot:
return res
layer.append(pRoot)
while len(layer) > 0:
node = layer.pop(0)
temp.append(node.val)
start += 1
if node.left:
layer.append(node.left)
if node.right:
layer.append(node.right)
if start == end:
start = 0
res.append(temp)
temp = []
end = len(layer)
return res
个人订阅号
image
网友评论