中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用JavaScript怎么實現一個二叉樹

發布時間:2021-04-09 17:37:17 來源:億速云 閱讀:160 作者:Leah 欄目:web開發

這篇文章給大家介紹使用JavaScript怎么實現一個二叉樹,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

function Node(data , left,right){
  this.data = data;
  this.left = left;
  this.right = right;
  this.show = show;
  function show(){
    return this.data;
  }
};
function Bst(){
  this.root = null;
  this.insert = insert;//插入
  this.inOrder = inOrder;//中序遍歷(升序)
  this.inOrderDesc = inOrderDesc;//中序遍歷(降序)
  this.preOrder = preOrder;//先序遍歷
  this.postOrder = postOrder;//后續遍歷
  this.getMin = getMin;//最大值
  this.getMax = getMax;//最小值
  this.find = find;//查找值
  this.remove = remove;//刪除節點
  this.count = count;//獲取節點數量
  function insert(data){
    //創建一個新的節點
    var newNode = new Node(data,null,null);
    //判斷是否存在根節點,沒有將新節點存入
    if(this.root == null){
      this.root = newNode;
    }else{
      //獲取根節點
      var current = this.root;
      var parent;
      while(true){
        //將當前節點保存為父節點
        parent = current;
        //將小的數據放在左節點
        if(data < current.data){
          //獲取當前節點的左節點
          //判斷當前節點下的左節點是否有數據
          current = current.left;
          if(current == null){
            //如果沒有數據將新節點存入當前節點下的左節點
            parent.left = newNode;
            break;
          }
        }else{
          current = current.right;
          if(current == null){
            parent.right = newNode;
            break;
          }
        }
      }
    }
  }
  function inOrder(node){
    var data = [];
    _inOrder(node,data);
    return data;
  }
  function inOrderDesc(node){
    var data = [];
    _inOrderDesc(node,data);
    return data;
  }
  function preOrder(node){
    var data = [];
    _preOrder(node,data);
    return data;
  }
  function postOrder(node){
    var data = [];
    _postOrder(node,data);
    return data;
  }
  function _inOrder(node,data){
    if(!(node == null)){
      _inOrder(node.left,data);
      data.push(node.show());
      _inOrder(node.right,data);
    }
  }
  function _inOrderDesc(node,data){
    debugger;
    if(!(node == null)){
      _inOrderDesc(node.right,data);
      data.push(node.show());
      _inOrderDesc(node.left,data);
    }
  }
  function _preOrder(node,data){
    if(!(node == null)){
      data.push(node.show());
      _preOrder(node.left,data);
      _preOrder(node.right,data);
    }
  }
  function _postOrder(node,data){
    if(!(node == null)){
      _postOrder(node.left,data);
      _postOrder(node.right,data);
      data.push(node.show());
    }
  }
  function getMin(){
    var current = this.root;
    while(!(current.left == null)){
    current = current.left;
    }
    return current.data;
  }
  function getMax(){
    var current = this.root;
    while(!(current.right == null)){
    current = current.right;
    }
    return current.data;
  }
  function find(data){
    var current = this.root;
    while(current != null){
      if(data == current.data){
        return current;
      }else if(data < current.data){
        current = current.left;
      }else{
        current = current.right;
      }
    }
    return null;
  }
  function getSmallest(node){
    var current = node;
    while(!(current.left == null)){
      current = current.left;
    }
    return current;
  }
  function remove(data){
    root = removeNode(this.root,data);
  }
  function removeNode(node,data){
    if(node == null){
      return null;
    }
    if(data == node.data){
      //如果沒有只節點
      if(node.left == null && node.right){
        return null;
      }
      //如果沒有左節點
      if(node.left == null){
        return node.right;
      }
      //如果沒有右節點
      if(node.right == null){
        return node.left;
      }
      //有兩節點
      var tempNode = getSmallest(node.right);
      node.data = tempNode.data;
      node.right = removeNode(node.right,tempNode.data);
      return node;
    }else if(data < node.data){
      node.left = removeNode(node.left,data);
      return node;
    }else{
      node.right = removeNode(node.right,data);
      return node;
    }
  }
  function count(){
    var counts = 0;
    var current = this.root;
    if(current == null){
      return counts;
    }
    return _count(current,counts);
  }
  function _count(node,counts){
    debugger;
    if(!(node == null)){
      counts ++;
      counts = _count(node.left,counts);;
      counts = _count(node.right,counts);
    }
    return counts;
  }
}

關于使用JavaScript怎么實現一個二叉樹就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

织金县| 缙云县| 南和县| 崇文区| 商河县| 兴海县| 屯昌县| 忻州市| 肇庆市| 沁水县| 通江县| 肥东县| 南溪县| 嘉荫县| 焦作市| 高邑县| 汝城县| 景洪市| 永平县| 卓尼县| 海原县| 孟连| 木兰县| 宜春市| 邛崃市| 林州市| 唐山市| 科技| 罗甸县| 铜鼓县| 鹿泉市| 洛扎县| 三门峡市| 吉林省| 沽源县| 绥江县| 仪陇县| 昆明市| 清徐县| 象州县| 浙江省|