今天学习的是二叉树的先序遍历、中序遍历、后序遍历
二叉树的遍历再Java中其实是很简单的一件事情,因为Java都给你把方法封装好了
root.val
表示取节点的数据
方法(root.left)//表示遍历左子树
方法(root.right)//表示遍历右子树
今天错的几个地方
1、
先写的这句话
int len = list1.size();
int tree[][] = new int [3][len];
再写的这句话
//先序遍历
pre(root);
//中序遍历
mid(root);
//后序遍历
last(root);
忘记了是在方法中加入的元素,如果不先使用方法,会导致列表长度为0,导致len的值也为0,数组初始化的时候列的长度也为0,导致后面向数组中加元素的时候数组越界的错误
2、
ArrayList <Integer> list1 = new ArrayList<>();
ArrayList <Integer> list2 = new ArrayList<>();
ArrayList <Integer> list3 = new ArrayList<>();
这一段代码我开始写的是
List <Integer> list1 = new ArrayList<>();
List <Integer> list2 = new ArrayList<>();
List <Integer> list3 = new ArrayList<>();
然后后面在方法中也是用的ArrayList来定义,这会出现这样的错误
incompatible types: ArrayList<ArrayList<Integer>> cannot be converted to List<List<Integer>>
用List来定义list1、list2、list3时,再在方法中用ArrayList来定义
ArrayList是List的子类没错,但是ArrayList<Integer>
并不是List<Integer>
的子类,所以并不能直接用,他们是并列关系,所以不能用来实例化
ArrayList<Integer>并不继承于List<Integer>
3、在方法中这一段代码不能少,否则会报空指针错误
if(root == null){
return list1;
}
import java.util.*;
import java.util.List;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* }
*/
public class Solution {
/**
*
* @param root TreeNode类 the root of binary tree
* @return int整型二维数组
*/
ArrayList <Integer> list1 = new ArrayList<>();
ArrayList <Integer> list2 = new ArrayList<>();
ArrayList <Integer> list3 = new ArrayList<>();
public int[][] threeOrders (TreeNode root) {
// write code here
//先序遍历
pre(root);
//中序遍历
mid(root);
//后序遍历
last(root);
int len = list1.size();
int tree[][] = new int [3][len];
//如果该二叉树是空的,就返回一个空的数组
if(root == null){
return new int[][]{{}};
}
for(int i=0; i<list1.size(); i++){
tree[0][i] = list1.get(i);
}
for(int i=0; i<list2.size(); i++){
tree[1][i] = list2.get(i);
}
for(int i=0; i<list3.size(); i++){
tree[2][i] = list3.get(i);
}
return tree;
}
private ArrayList<Integer> pre(TreeNode root){
if(root == null){
return list1;
}
list1.add(root.val);
pre(root.left);
pre(root.right);
return list1;
}
private ArrayList<Integer> mid(TreeNode root){
if(root == null){
return list2;
}
mid(root.left);
list2.add(root.val);
mid(root.right);
return list2;
}
private ArrayList<Integer> last(TreeNode root){
if(root == null){
return list3;
}
last(root.left);
last(root.right);
list3.add(root.val);
return list3;
}
}