题目描述:给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
链接:https://leetcode-cn.com/problems/binary-tree-level-order-traversal
求解思路:
- 采用层序遍历,同时在递归方法的参数中加上当前节点的层数;
- 在递归方法内部,根据层数信息,决定将此节点加入到哪个数组中。
代码实现:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
//创建成员变量来记录结果
public static List<List<Integer>> result = new ArrayList<>();
public List<List<Integer>> levelOrder(TreeNode root) {
//每次得更新result 避免多组数据时,对之后结果产生影响
result = new ArrayList<>();
if(root == null){
return result;
}
hoper(root,0);
return result;
}
public static void hoper(TreeNode root,int level){
//起始level和result的长度都为0,get取下标会出现越界异常,
//可提前创建一个实例,并插入到result中
if(level == result.size()){
result.add(new ArrayList<>());
}
//先根据level取到下标,再往对应下标位置添加元素
result.get(level).add(root.val);
//再处理左右子树
if(root.left != null){
hoper(root.left,level + 1);
}
if(root.right != null){
hoper(root.right,level + 1);
}
}
}