剑指 Offer 32 - I. 从上到下打印二叉树
题目

思路
通过队列工具,将每一层的节点由左到右一次添加,当队列不为空的时候始终可以运行;
代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public int[] levelOrder(TreeNode root) {
if(root==null) return new int[0];
Queue<TreeNode> queue=new LinkedList<>(){{add(root);}};
ArrayList<Integer> list=new ArrayList<>();
while(!queue.isEmpty()){
TreeNode node=queue.poll();
list.add(node.val);
if(node.left!=null) queue.add(node.left);
if(node.right!=null) queue.add(node.right);
}
int[] ans=new int[list.size()];
for(int i=0;i<list.size();i++){
ans[i]=list.get(i);
}
return ans;
}
}
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def levelOrder(self, root: TreeNode) -> List[int]:
if root==None: return []
ans,queue=[],collections.deque()
queue.append(root)
while(queue):
node=queue.popleft()
ans.append(node.val)
if node.left : queue.append(node.left)
if node.right: queue.append(node.right)
return ans
剑指 Offer 32 - II. 从上到下打印二叉树 II

思路
注意输出时需要将每层节点作为一个值添加进最外层的list中,设置一个记录树每层有多少个节点的计数值(即为队列的长度),按照该计数值,循环输出该层的节点数值。
代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
if(root==null) return new LinkedList<>();
Queue<TreeNode> queue=new LinkedList<>(){{add(root);}};
List<List<Integer>> arr=new LinkedList<>();
while(!queue.isEmpty()){
LinkedList<Integer> tmp=new LinkedList<>();
int len=0;
len=queue.size();
while(len>0){
TreeNode node=queue.poll();
tmp.add(node.val);
if(node.left!=null) queue.add(node.left);
if(node.right!=null) queue.add(node.right);
len--;
}
arr.add(tmp);
}
return arr;
}
}
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def levelOrder(self, root: TreeNode) -> List[List[int]]:
if root==None:return []
ans,queue=[],collections.deque()
queue.append(root)
while queue:
tmp=[]
length=len(queue)
while length:
node=queue.popleft()
tmp.append(node.val)
if node.left : queue.append(node.left)
if node.right: queue.append(node.right)
length-=1
ans.append(tmp)
return ans
剑指 Offer 32 - III. 从上到下打印二叉树 III
题目

代码
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
Queue<TreeNode> queue = new LinkedList<>();
List<List<Integer>> res = new ArrayList<>();
if(root != null) queue.add(root);
while(!queue.isEmpty()) {
LinkedList<Integer> tmp = new LinkedList<>();
for(int i = queue.size(); i > 0; i--) {
TreeNode node = queue.poll();
if(res.size() % 2 == 0) tmp.addLast(node.val); // 偶数层 -> 队列头部
else tmp.addFirst(node.val); // 奇数层 -> 队列尾部
if(node.left != null) queue.add(node.left);
if(node.right != null) queue.add(node.right);
}
res.add(tmp);
}
return res;
}
}
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def levelOrder(self, root: TreeNode) -> List[List[int]]:
if root==None:return []
ans,queue=[],collections.deque()
queue.append(root)
i=2
while queue:
tmp=collections.deque();
length=len(queue)
while length :
node=queue.popleft()
if i % 2: tmp.appendleft(node.val) # 偶数层 -> 队列头部
else: tmp.append(node.val) # 奇数层 -> 队列尾部
if node.left : queue.append(node.left)
if node.right: queue.append(node.right)
length-=1
ans.append(list(tmp))
i+=1
return ans
浙公网安备 33010602011771号