层序遍历
对应图论里面的广度优先算法。
ArrayDeque和LinkedList用作队列的区别
https://cloud.tencent.com/developer/article/2348751
自己写出来了,不过比较长,while循环可以优化一下,大循环里放isEmpty();
public List<List<Integer>> levelOrder(TreeNode root) {
List result = new ArrayList();
List<Integer> list = new ArrayList();
//构建队列
Queue<TreeNode> queue = new ArrayDeque<TreeNode>();
if(root == null){
return result;
}
TreeNode cur = new TreeNode();
TreeNode temp = new TreeNode();
List temp_list = new ArrayList();
cur = root;
queue.offer(cur);
int size = queue.size();
while(size != 0){
temp = queue.poll();
list.add(temp.val);
if(temp.left != null){
queue.offer(temp.left);
}
if(temp.right != null){
queue.offer(temp.right);
}
size --;
if(size == 0 && (!queue.isEmpty())){
size = queue.size();
temp_list = list;
result.add(temp_list);
list = new ArrayList();
}
}
result.add(list);
return result;
反转二叉树
用前序或者后序遍历比较简单
自己写的时候犯了个错误:用前序遍历的时候里面还加了for循环,其实递归方法里,if(root==null)
其实就有控制递归的终止条件
有三种方法,这次主要掌握递归法: