二叉树层序遍历用队列来处理。队列先进先出。add()。remove()、offer()、poll();
/**
- @Author: Mr.huang
- @Date: 2021/08/09/14:37
- @Description: NC15 求二叉树的层序遍历 给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历)
- 例如:
- 给定的二叉树是{3,9,20,#,#,15,7},
- 该二叉树层序遍历的结果是
- [
- [3],
- [9,20],
- [15,7]
- ]
- /
public class NC15 {
public static void main(String[] args) {
TreeNode treeNode1 = new TreeNode();
TreeNode treeNode2 = new TreeNode();
TreeNode treeNode3 = new TreeNode();
treeNode1.setVal(3);
treeNode1.setTreeLeft(treeNode2);
treeNode1.setTreeRight(treeNode3);
treeNode2.setVal(9);
treeNode3.setVal(20);
TreeNode treeNode4 = new TreeNode();
TreeNode treeNode5 = new TreeNode();
treeNode3.setTreeLeft(treeNode4);
treeNode3.setTreeRight(treeNode5);
ArrayList<ArrayList<integer>> arrayLists = levelOrder(treeNode1);
String s = Arrays.toString(arrayLists.toArray());
System.out.println(s);
}</integer>
public static ArrayList<ArrayList<Integer>> levelOrder (TreeNode root) {
// write code here
//queue 先进先出
Queue<TreeNode> treeNodeQueue=new LinkedList<>();
treeNodeQueue.add(root);
ArrayList<ArrayList<Integer>> nodeList=new ArrayList<>();
if (root==null){return nodeList;}
while (!treeNodeQueue.isEmpty()){
int size=treeNodeQueue.size();
ArrayList<Integer> arrayList=new ArrayList<>();
while (size-- >0){
TreeNode t = treeNodeQueue.poll();
arrayList.add(t.val);
if (t.getTreeLeft()!=null){
treeNodeQueue.add(t.getTreeLeft());
}
if (t.getTreeRight()!=null){
treeNodeQueue.add(t.getTreeRight());
}
}
nodeList.add(arrayList);
}
return nodeList;
}}
@Data
class TreeNode{
int val;
TreeNode treeLeft;
TreeNode treeRight;
}

京公网安备 11010502036488号