题目一:二叉树的层序遍历(前向)
解法:
个人认为 破二叉树最好的方法就是递归 虽然还没写出来过双百的
List<List<Integer>> list = new ArrayList<>();
public List<List<Integer>> levelOrder(TreeNode root) {
dns(root,0);
return list;
}
private void dns(TreeNode root, int level) {
if (list.size() == level)list.add(new ArrayList<>());
if (root==null){
list.get(level).add(-1);return;
}else list.get(level).add(root.val);
dns(root.left,level+1);
dns(root.right,level+1);
}
题目二:二叉树的层序遍历(后向)
解法一:循环反转
List<List<Integer>> list = new ArrayList<>();
List<List<Integer>> result = new ArrayList<>();
public List<List<Integer>> levelOrderBottom(TreeNode root) {
dns(root,0);
if (list!=null && list.size()!=0){
for (int i=list.size()-1; i>=0; i--){
result.add(list.get(i));
}
}
return result;
}
private void dns(TreeNode root, int level) {
if (root == null)return;
if (list.size()==level) list.add(new ArrayList<>());
list.get(level).add(root.val);
dns(root.left,level+1);
dns(root.right,level+1);
}
解法二:逆向递归
public List<List<Integer>> levelOrderBottom(TreeNode root) {
List<List<Integer>> list = new ArrayList<>();
dns(root,0,list);
return list;
}
private void dns(TreeNode root, int level, List<List<Integer>> list) {
if (root == null)return;
if (list.size() == level) list.add(0,new ArrayList<>());
list.get(list.size()-level-1).add(root.val);
dns(root.left,level+1,list);
dns(root.right,level+1,list);
}