102.二叉树的层次遍历
二叉树的层次遍历题目链接
List<List<Integer>> results;
public List<List<Integer>> levelOrder(TreeNode root) {
results = new ArrayList<>();
if(root==null){
return results;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while(!queue.isEmpty()){
int size = queue.size();
List<Integer> list = new ArrayList<>();
for(int i=0;i<size;i++){
TreeNode p = queue.poll();
list.add(p.val);
if(p.left!=null){
queue.offer(p.left);
}
if(p.right!=null){
queue.offer(p.right);
}
}
results.add(list);
}
return results;
}
104.二叉树的最大深度
二叉树的最大深度题目链接
- 方法一:用递归左右两边取最大,不为空的就加1,为空返回0
public int maxDepth(TreeNode root) {
if(root==null){
return 0;
}
return Math.max(maxDepth(root.left)+1,maxDepth(root.right)+1);
}
public int maxDepth(TreeNode root) {
if(root==null){
return 0;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
int depth = 0;
while(!queue.isEmpty()){
int size = queue.size();
for(int i=0;i<size;i++){
TreeNode p = queue.poll();
if(p.left!=null){
queue.offer(p.left);
}
if(p.right!=null){
queue.offer(p.right);
}
}
depth++;
}
return depth;
}
107.二叉树的层次遍历II
二叉树的层次遍历II题目链接
- 和102差不多,bfs的思想,插入的时候每次从插入都从0位插入
List<List<Integer>> results;
public List<List<Integer>> levelOrderBottom(TreeNode root) {
results = new ArrayList<>();
if(root==null){
return results;
}
TreeNode p = root;
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(p);
while(!queue.isEmpty()){
List<Integer> list = new ArrayList<>();
int size = queue.size();
for(int i=0;i<size;i++){
TreeNode treeNode = queue.poll();
list.add(treeNode.val);
if(treeNode.left!=null){
queue.offer(treeNode.left);
}
if(treeNode.right!=null){
queue.offer(treeNode.right);
}
}
results.add(0,list);
}
return results;
}