102. 二叉树的层序遍历
这道题的链接: 102. 二叉树的层序遍历
这道题真的没什么好说的,层序遍历和前序遍历,后序遍历都是最基本的遍历,这要是写不出来就丢大人了,,,,其实昨天我就没写出来,,,尴尬
我的第一种做法就跟下面这个差不多,在这里的设计思路就是我们首先要注意层序遍历和二叉树的特点,层序遍历就是先父节点后是子节点,二叉树是根节点和子节点的关系,同一层之间除了父节点没有其他的关系。。。所以我们可以使用queue接口,也就是队列,队列是先塞进去的数据肯定是先出来,所以我们这样子想。。先把一层的父节点塞进来,然后先poll出一个父节点,把他的所有子节点放进队列。。。所以这又会引出来一个问题,我们咋知道哪几个是父节点哪几个是子节点,我们可以这样子想,我们在队列弹出之前提前记住队列元素的个数,这个时候就是全是一层的节点。下面就是代码的实现:
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>>ret = new ArrayList<>();
if(root == null) {
return ret;
}
Queue<TreeNode> queue = new LinkedList<TreeeNode>();
queue.offer(root);
while (!queue.isEmpty()) {
List<Integer> level = new ArrayList<>();
int currentLevelSize = queue.size();
for (int i = 0; i <= currentLevelSize; ++i){
TreeNode node = queue.poll();
level.add(node.val);
if(node.left != null){
queue.offer(node.left);
}
if(node.right != null){
queue.offer(node.right);
})
}
ret.add(level);
}
return ret;
}
}