# 二叉排序树

二叉排序树 又称为 二叉搜索树或二叉查找树。

# 特征

  • 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值。
  • 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值。
  • 它的左、右子树也分别为二叉查找树。

# 结构

// 创建根节点
let root = null

// 创建节点的构造函数
function Node(key) {
  this.key = key
  this.left = null
  this.right = null
}

// 根据二叉搜索树规则进行排序
function insert(node, newNode) {
  // 比较key,比他小的塞左边,比他大的塞右边
  if (newNode.key < node.key) {
    // 判断节点是否存在,无则赋值,有则递归比较再插入
    if (node.left === null) {
      node.left = newNode
    } else {
      insert(node.left, newNode)
    }
  } else {
    if (node.right === null) {
      node.right = newNode
    } else {
      insert(node.right, newNode)
    }
  }
}

// 生成二叉搜索树
function binaryTree(nodeArr) {
  function makeBinaryTree(key) {
    const newNode = new Node(key)
    if (root === null) {
      root = newNode
    } else {
      insert(root, newNode)
    }
  }
  nodeArr.forEach(key => makeBinaryTree(key))
  return root
}

const nodeArr = [8,3,10,1,6,14,12,4,7,13]
console.log(binaryTree(nodeArr))