1. const arr = [];
    2. /**
    3. * 生成数字
    4. * @param {Number} len 数据的长度
    5. */
    6. function createArr(len) {
    7. for (let i = 0; i < len; i++) {
    8. arr.push(Math.floor(Math.random() * 10000))
    9. }
    10. }
    11. createArr(10000)
    12. /**
    13. * Node类
    14. */
    15. class Node {
    16. constructor(value) {
    17. this.value = value;
    18. this.left = null;
    19. this.right = null;
    20. }
    21. }
    22. /**
    23. * 生成二叉搜索树
    24. * @param {Array} arr 数组
    25. */
    26. function buildSearchTree(arr) {
    27. if (arr == null || arr.length == 0) return;
    28. let root = new Node(arr[0]);
    29. for (let i = 1; i < arr.length; i++) {
    30. addNode(root, arr[i])
    31. }
    32. return root;
    33. }
    34. /**
    35. * 生成子树
    36. * @param {Object} root 根节点
    37. * @param {Number} num 需要比对的数字
    38. */
    39. function addNode(root, num) {
    40. if (num == null) return;
    41. if (root.value == num) return;
    42. if (root.value < num) {// num大于root num会在root的右子树
    43. if (root.right == null) root.right = new Node(num);
    44. else addNode(root.right, num);
    45. } else { // num小于root,num会在root的左子树
    46. if (root.left == null) root.left = new Node(num);
    47. else addNode(root.left, num);
    48. }
    49. }
    50. let root = buildSearchTree(arr)
    51. /**
    52. * 二叉树搜索
    53. * @param {Object} root 根节点
    54. * @param {Number} target 目标值
    55. */
    56. function searchNode(root, target) {
    57. num++;
    58. if(root == null ) return false;
    59. if(root.value == target) return true;
    60. if(root.value < target) return searchNode(root.right,target)
    61. else return searchNode(root.left, target);
    62. }
    63. let result = searchNode(root , 1000)
    64. console.log(result , num)