树的层次遍历(102) 最小基因变化(433)括号生成(22)在每个树行中找最大值(515)

1. DFS

  1. // 使用递归
  2. public void dfs(Node node) {
  3. if (vistied.contains(node)) {
  4. return;
  5. }
  6. visited.add(node);
  7. //
  8. dfs(node.left);
  9. dfs(node.right);
  10. }
  11. // 使用栈
  12. public void dfs(Node self, Node tree) {
  13. if (tree.root == null) {
  14. return;
  15. }
  16. Set<Node> visited = new HashSet<>();
  17. Stack<Node> stack = new Stack<>();
  18. while (!stack.isEmpty()) {
  19. Node node = stack.pop();
  20. visited.add(node);
  21. process(node);
  22. nodes = getRelatedNodes(node);
  23. stack.push(nodes);
  24. // ....
  25. }
  26. }

1.1

2. BFS

  1. public void bfs(Node node) {
  2. Queue<Node> queue = new LinkedList<>();
  3. queue.add(node);
  4. while (!queue.isEmpty()) {
  5. Node temp = queue.poll();
  6. // handle node
  7. process(temp);
  8. // next
  9. List<Node> relatedNodes = getRelatedNodes(temp);
  10. queue.addAll(relatedNodes);
  11. }
  12. }

2.1 二叉树的层序遍历(102)

2.2 最小基因变化(433)

2.3 括号生成(22)

2.4 在每个树行中找最大值(515)