一.非递归法
import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* public TreeNode(int val) {
* this.val = val;
* }
* }
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root TreeNode类
* @return int整型ArrayList<ArrayList<>>
*/
public ArrayList<ArrayList<Integer>> levelOrder (TreeNode root) {
// write code here
//如果头结点为空,返回一个空数组
if (root == null) {
return new ArrayList<ArrayList<Integer>>();
}
//保存的是ArrayList<Integer>数组
ArrayList<ArrayList<Integer>> list = new ArrayList<>();
//队列用来存放结点
Queue<TreeNode> queue = new LinkedList<TreeNode>();
//先将根结点加入到队列中
queue.add(root);
while (!queue.isEmpty()) {
//创建一个数组用来保存元素的值,最终添加到list
ArrayList<Integer> list1 = new ArrayList<>();
//记录队列的长度
int queueSize = queue.size();
for (int i = 0; i < queueSize; i++) {
TreeNode poll = queue.poll();
list1.add(poll.val);
if (poll.left != null) {
queue.add(poll.left);
}
if (poll.right != null) {
queue.add(poll.right);
}
}
list.add(list1);
}
return list;
}
}
二.递归法
import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* public TreeNode(int val) {
* this.val = val;
* }
* }
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root TreeNode类
* @return int整型ArrayList<ArrayList<>>
*/
//创建一个存储数组的list数组
ArrayList<ArrayList<Integer>> list = new ArrayList<>();
public ArrayList<ArrayList<Integer>> levelOrder (TreeNode root) {
// write code here
if (root == null) {
return list;
}
traverse(root,1);
return list;
}
private void traverse(TreeNode root,int depth) {
if (root != null) {
/*
先创建一维数组res,将一维数组添加到list数组中,
把值存入到一维数组res中
*/
if (list.size() < depth) {
ArrayList<Integer> res = new ArrayList<>();
list.add(res);
res.add(root.val);
}
//数组的长度跟深度一致,深度减一,把这个元素加入到res数组的末尾
else {
ArrayList<Integer> res = list.get(depth - 1);
res.add(root.val);
}
}
//结点为空的时候,返回就行
else {
return;
}
//深度从根结点开始算为1,向下一层就要加1
traverse(root.left,depth + 1);
traverse(root.right,depth + 1);
}
}