91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

使用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

云浮市| 白银市| 寿宁县| 英吉沙县| 石柱| 大厂| 宁陕县| 宜兰县| 邯郸市| 大埔县| 乌拉特前旗| 彩票| 东方市| 禄劝| 满洲里市| 达日县| 凤城市| 惠东县| 安塞县| 响水县| 寿光市| 杂多县| 甘孜| 永清县| 宁武县| 高邮市| 图们市| 宿迁市| 新绛县| 甘德县| 兰州市| 绿春县| 灌阳县| 普兰店市| 固阳县| 三都| 民县| 屯留县| 弥渡县| 惠安县| 金平|