最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript數(shù)據(jù)結構與算法之二叉樹添加/刪除節(jié)點操作示例

 更新時間:2019年03月01日 12:04:10   作者:白楊-M  
這篇文章主要介紹了JavaScript數(shù)據(jù)結構與算法之二叉樹添加/刪除節(jié)點操作,涉及javascript二叉樹的定義、節(jié)點添加、刪除、遍歷等相關操作技巧,需要的朋友可以參考下

本文實例講述了JavaScript數(shù)據(jù)結構與算法之二叉樹添加/刪除節(jié)點操作。分享給大家供大家參考,具體如下:

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.getMin = getMin;
  this.getMax = getMax;
  this.find = find;
  this.remove = remove;
}
function insert(data) {
  var n = new Node(data,null,null);
  if(this.root == null) {
    this.root = n;
  }else {
    var current = this.root;
    var parent;
    while(current) {
      parent = current;
      if(data < current.data) {
        current = current.left;
        if(current == null) {
          parent.left = n;
          break;
        }
      }else {
        current = current.right;
        if(current == null) {
          parent.right = n;
          break;
        }
      }
    }
  }
}
// 中序遍歷
function inOrder(node) {
  if(!(node == null)) {
    inOrder(node.left);
    console.log(node.show());
    inOrder(node.right);
  }
}
// 先序遍歷 
function preOrder(node) {
  if(!(node == null)) {
    console.log(node.show());
    preOrder(node.left);
    preOrder(node.right);
  }
}
// 后序遍歷
function postOrder(node) {
  if(!(node == null)) {
    postOrder(node.left);
    postOrder(node.right);
    console.log("后序遍歷"+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(current.data == data) {
      return current;
    }else if(data < current.data) {
      current = current.left;
    }else {
      current = current.right;
    }
  }
  return null;
}
function remove(data) {
  root = removeNode(this.root,data);
}
function getSmallest(node) {
  if (node.left == null) {
   return node;
  }
  else {
   return getSmallest(node.left);
  }
}
function removeNode(node,data) {
  if(node == null) {
    return null;
  }
  if(data == node.data) {
    // 沒有子節(jié)點的節(jié)點
    if(node.left == null && node.right == null) {
      return null;
    } 
    // 沒有左子節(jié)點的節(jié)點
    if(node.left == null) {
      return node.right;
    }
    // 沒有右子節(jié)點的節(jié)點
    if(node.right == null) {
      return node.left;
    }
    // 有2個子節(jié)點的節(jié)點
    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;
  }
}
//代碼初始化如下:
var nums = new BST();
nums.insert(23);
nums.insert(45);
nums.insert(16);
nums.insert(37);
nums.insert(3);
nums.insert(99);
nums.insert(22);
var min = nums.getMin();
console.log(min);
var max = nums.getMax();
console.log(max);
var value = nums.find("45");
console.log(value);
nums.remove(23);

運行結果:

感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運行工具http://tools.jb51.net/code/HtmlJsRun測試上述代碼運行效果。

更多關于JavaScript相關內容感興趣的讀者可查看本站專題:《JavaScript數(shù)學運算用法總結》、《JavaScript數(shù)據(jù)結構與算法技巧總結》、《JavaScript數(shù)組操作技巧總結》、《JavaScript排序算法總結》、《JavaScript遍歷算法與技巧總結》、《JavaScript查找算法技巧總結》及《JavaScript錯誤與調試技巧總結

希望本文所述對大家JavaScript程序設計有所幫助。

相關文章

  • layui--js控制switch的切換方法

    layui--js控制switch的切換方法

    今天小編就為大家分享一篇layui--js控制switch的切換方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • JavaScript數(shù)據(jù)分析之交集,并集,對稱差集

    JavaScript數(shù)據(jù)分析之交集,并集,對稱差集

    這篇文章主要介紹了JavaScript數(shù)據(jù)分析之交集,并集,對稱差集,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-07-07
  • javascript新聞跑馬燈實例代碼

    javascript新聞跑馬燈實例代碼

    這篇文章主要為大家詳細介紹了javascript新聞跑馬燈實例代碼,所謂的跑馬燈就是無縫滾動效果代碼,常見于新聞公告之類的功能,需要的朋友可以參考下
    2015-12-12
  • JavaScript Set與Map數(shù)據(jù)結構詳細分析

    JavaScript Set與Map數(shù)據(jù)結構詳細分析

    大家心里是否產生過這樣的疑問,JS中既然已經(jīng)有對象這種數(shù)據(jù)結構,我們?yōu)槭裁催€要再單獨去使用Set或者Map呢?下面這篇文章主要給大家介紹了關于ES6中Set和Map數(shù)據(jù)結構的相關資料,需要的朋友可以參考下
    2022-11-11
  • 普通js文件里面如何訪問vue實例this指針

    普通js文件里面如何訪問vue實例this指針

    這篇文章主要介紹了普通js文件里面如何訪問vue實例this指針,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 微信小程序左滑動顯示菜單功能的實現(xiàn)

    微信小程序左滑動顯示菜單功能的實現(xiàn)

    這篇文章主要介紹了微信小程序左滑動顯示菜單功能的實現(xiàn),代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-06-06
  • 史上最全JavaScript常用的簡寫技巧(推薦)

    史上最全JavaScript常用的簡寫技巧(推薦)

    這篇文章主要介紹了JavaScript常用的簡寫技巧,列舉了20條js中常用的簡寫技巧,具體操作步驟大家可查看下文的詳細講解,感興趣的小伙伴們可以參考一下
    2017-08-08
  • js的閉包的一個示例說明

    js的閉包的一個示例說明

    js中 某個函數(shù)的內部函數(shù)在該函數(shù)執(zhí)行結束后仍然可以訪問這個函數(shù)中定義的變量,這稱為閉包(Closure)
    2008-11-11
  • JavaScript數(shù)組及常見操作方法小結

    JavaScript數(shù)組及常見操作方法小結

    這篇文章主要介紹了JavaScript數(shù)組及常見操作方法,結合實例形式總結分析了JavaScript數(shù)組的基本獲取、添加、刪除、排序、翻轉等相關操作技巧,需要的朋友可以參考下
    2019-11-11
  • js獲取新浪天氣接口的實現(xiàn)代碼

    js獲取新浪天氣接口的實現(xiàn)代碼

    下面小編就為大家?guī)硪黄猨s獲取新浪天氣接口的實現(xiàn)代碼。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06

最新評論

海南省| 璧山县| 礼泉县| 昔阳县| 娱乐| 溧水县| 阿克陶县| 忻州市| 嵩明县| 垦利县| 正定县| 木兰县| 湟源县| 江达县| 辉南县| 威海市| 潍坊市| 靖安县| 大姚县| 新巴尔虎左旗| 加查县| 扎兰屯市| 德保县| 高要市| 旬邑县| 宁乡县| 沅江市| 嘉善县| 望都县| 抚宁县| 鸡泽县| 牟定县| 沾化县| 东宁县| 建瓯市| 柳河县| 道孚县| 永川市| 奉贤区| 普兰店市| 大名县|