image.png

1️⃣ 深度优先搜索

  1. function Node(value) {
  2. this.value = value;
  3. this.left = null;
  4. this.right = null;
  5. }
  6. var a = new Node('a');
  7. var b = new Node('b');
  8. var c = new Node('c');
  9. var d = new Node('d');
  10. var e = new Node('e');
  11. var f = new Node('f');
  12. var g = new Node('g');
  13. var h = new Node('h');
  14. var i = new Node('i');
  15. var j = new Node('j');
  16. var k = new Node('k');
  17. a.left = b;
  18. a.right = c;
  19. b.left = d;
  20. b.right = e;
  21. c.left = f;
  22. c.right = g;
  23. d.left = h;
  24. d.right = i;
  25. g.left = j;
  26. g.right = k;
  27. // 对于二叉树来说,深度优先搜索和前序遍历的顺序是一样的。
  28. function deepSearch(root, target) {
  29. if (root == null) return false;
  30. if (root.value == target) return true;
  31. var left = deepSearch(root.left, target);
  32. var right = deepSearch(root.right, target);
  33. return left || right;
  34. }
  35. console.log(deepSearch(a, 'i'));

1️⃣ 广度优先搜索

  1. function Node(value) {
  2. this.value = value;
  3. this.left = null;
  4. this.right = null;
  5. }
  6. var a = new Node('a');
  7. var b = new Node('b');
  8. var c = new Node('c');
  9. var d = new Node('d');
  10. var e = new Node('e');
  11. var f = new Node('f');
  12. var g = new Node('g');
  13. var h = new Node('h');
  14. var i = new Node('i');
  15. var j = new Node('j');
  16. var k = new Node('k');
  17. a.left = b;
  18. a.right = c;
  19. b.left = d;
  20. b.right = e;
  21. c.left = f;
  22. c.right = g;
  23. d.left = h;
  24. d.right = i;
  25. g.left = j;
  26. g.right = k;
  27. function fun(rootList, target) {
  28. if (rootList == null || rootList.length == 0) return false;
  29. var childList = []; // 当前层所有节点的子节点, 在下一次时就可以一层一层遍历
  30. for (let i = 0; i < rootList.length; i++) {
  31. if (rootList[i] != null && rootList[i].value == target) {
  32. return true;
  33. } else {
  34. childList.push(rootList[i].left);
  35. childList.push(rootList[i].right);
  36. }
  37. }
  38. console.log(childList);
  39. return fun(childList, target);
  40. }
  41. console.log(fun([a], 'i'));