初识宽度优先搜索
发布于: 1 小时前
面试常考题目宽度优先搜索的两种实现方式。
以二叉树为例。
https://leetcode-cn.com/problems/binary-tree-level-order-traversal/
单队列实现
public List<List<Integer>> levelOrder(TreeNode root) { if (root == null) { return new ArrayList<>(); } final List<List<Integer>> ret = new ArrayList<>(); Queue<TreeNode> queue = new LinkedList<>(); queue.add(root);//这里第一步首先要添加root节点 while (!queue.isEmpty()){ int size = queue.size();//这个size要提前计算好。因为如果要动态计算。因为queue会动态的添加中。 final List<Integer> vals = new ArrayList<>(); for (int i = 0;i < size;i++){ TreeNode node = queue.poll(); vals.add(node.val); if (node.left != null){ queue.offer(node.left); } if (node.right != null){ queue.offer(node.right); } } ret.add(vals); } return ret;}
复制代码
两个队列实现
public static List<List<Integer>> levelOrder(TreeNode root) { List<List<Integer>> results = new ArrayList<>(); if (root == null) { return results; } List<TreeNode> queue = new ArrayList<>(); queue.add(root);//添加root节点 while (!queue.isEmpty()) { List<TreeNode> nextQ = new ArrayList<>(); results.add(toIntegerList(queue)); for (TreeNode treeNode : queue) { if (treeNode.left != null) { nextQ.add(treeNode.left); } if (treeNode.right != null) { nextQ.add(treeNode.right); } } queue = nextQ;//替换成另一个队列。 } return results; }
private static List<Integer> toIntegerList(List<TreeNode> queue) { List<Integer> list = new ArrayList<>(); for (TreeNode treeNode : queue) { list.add(treeNode.val); } return list; }
复制代码
划线
评论
复制
发布于: 1 小时前阅读数: 4
泽睿
关注
还未添加个人签名 2017.12.22 加入
还未添加个人简介











评论