package suanfa.tree;
import java.util.ArrayList;
import java.util.List;
import java.util.Queue;
import java.util.concurrent.LinkedBlockingDeque;
/**
二叉树的层序遍历
/
public class LevelOrder {/**
二叉树的层序遍历 依赖queue实现
@param root
@return
/
public static List<List<integer>> levelOrder(TreeNode root) {
List<List<integer>> list = new ArrayList<>();</integer></integer>Queue<treenode> queue = new LinkedBlockingDeque<>();
queue.add(root);</treenode>while (!queue.isEmpty()) {
List<Integer> subList = new ArrayList<>(); int currentLevelSize = queue.size(); //遍历每一层 for (int i = 1; i < currentLevelSize; i++) { TreeNode tmpNode = queue.poll(); subList.add(tmpNode.val); if (tmpNode.left != null) { queue.offer(tmpNode.left); } if (tmpNode.right != null) { queue.offer(tmpNode.right); } } list.add(subList);
}
return list;
}
static class TreeNode { int val; TreeNode left; TreeNode right; public int getVal() { return val; } public void setVal(int val) { this.val = val; } public TreeNode getLeft() { return left; } public void setLeft(TreeNode left) { this.left = left; } public TreeNode getRight() { return right; } public void setRight(TreeNode right) { this.right = right; } }
}