力扣102.二叉树的层序遍历
对于二叉树的层序遍历,使用队列是最好的,队列先进先出,符合层序遍历一层一层遍历的逻辑。这里我会给出非递归方式和递归方式来写出这道题。

对于这样的一颗树,它的层序遍历结果是
输出:[[3],[9,20],[15,7]]
这里我们可以使用一个size来记录每一层的节点个数,等到每层遍历完之后,就可以将这一层的结点加入到数组当中去。
代码如下
非递归遍历,借助队列
class Solution{
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> result = new ArrayList<>();
if (root == null){
return result;
}
Queue<TreeNode> que = new LinkedList<TreeNode>();
que.offer(root);
while(!que.isEmpty()){
int size = que.size();
List<Integer> list = new ArrayList<>();
while(size > 0){
TreeNode node = que.poll();
list.add(node.val);
if (node.left != null){
que.offer(node.left);
}
if (node.right != null){
que.offer(node.right);
}
size -- ;
}
result.add(list);
}
return result;
}
}
递归遍历
public TreeNode invertTree(TreeNode root) {
if(root == null){
return null;
}
invertTree(root.left);
invertTree(root.right);
swapChildren(root);
return root;
}
private void swapChildren(TreeNode root) {
TreeNode temp = root.left;
root.left = root.right;
root.right = temp;
}
293

被折叠的 条评论
为什么被折叠?



