二叉树层序遍历用队列来处理。队列先进先出。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;
}