为什么这些重复的键对宽度优先遍历很重要?
static void breadthFirstVisit(TreeNode root) {
Deque<TreeNode> queue = new LinkedList();
queue.add(root);
while (!queue.isEmpty()) {
TreeNode node = queue.poll();
System.out.println("visiting node with value " + node.val);
if (node.left != null) queue.add(node.left);
if (node.right != null) queue.add(node.right);
}
}
或者省略重复项
static void breadthFirstVisit(TreeNode root) {
Deque<TreeNode> queue = new LinkedList();
Set<TreeNode> visited = new HashSet();
queue.add(root);
while (!queue.isEmpty()) {
TreeNode node = queue.poll();
System.out.println("visiting node with value " + node.val);
if (node.left != null && !visited.contains(node.left)) {
queue.add(node.left);
visited.add(node.left);
}
if (node.right != null && !visited.contains(node.right)) {
queue.add(node.right);
visited.add(node.right);
}
}
}