问题:
从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。
示例:
给定二叉树: [3,9,20,null,null,15,7]
输出为:[[3],[9,20],[15,7]]
思想:
二叉树递归层序遍历,首先定义一个链表,链表的每个节点都是一个链表。然后定义递归函数,参数分别为二叉树节点以及节点所在层数。递归遍历其左右孩子。
代码:
//java 递归层次遍历
List<List<Integer>> node=new ArrayList();
public List<List<Integer>> levelOrder(TreeNode root) {
wzx(root,0);
return node;
}
public void wzx(TreeNode root,int k){
if(root!=null){
//node.size是外层链表的长度,链表里面还是一个链表。用来存放二叉树第k层的数据,存完一层后,递归下一层,k++,如果下一层不为空的话,就要增加一个链表用来存放第k+层的数据
if(node.size()<=k)node.add(new ArrayList());
node.get(k).add(root.val);
//左右子树都在+1层
wzx(root.left,k+1);
wzx(root.right,k+1);
}
}