欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

javascript數(shù)據(jù)結(jié)構(gòu)之二叉搜索樹(shù)實(shí)現(xiàn)方法

 更新時(shí)間:2015年11月25日 15:04:18   作者:菩提樹(shù)下的楊過(guò)  
這篇文章主要介紹了javascript數(shù)據(jù)結(jié)構(gòu)之二叉搜索樹(shù)實(shí)現(xiàn)方法,較為詳細(xì)的分析了二叉搜索樹(shù)的概念、原理與JavaScript實(shí)現(xiàn)二叉搜索樹(shù)的方法,對(duì)于學(xué)習(xí)JavaScript數(shù)據(jù)結(jié)構(gòu)具有一定參考借鑒價(jià)值,需要的朋友可以參考下

本文實(shí)例講述了javascript二叉搜索樹(shù)實(shí)現(xiàn)方法。分享給大家供大家參考,具體如下:

二叉搜索樹(shù)顧名思義,樹(shù)上每個(gè)節(jié)點(diǎn)最多只有二根分叉;而且左分叉節(jié)點(diǎn)的值 < 右分叉節(jié)點(diǎn)的值 。

特點(diǎn)插入節(jié)點(diǎn)、找最大/最小節(jié)點(diǎn)、節(jié)點(diǎn)值排序 非常方便

二叉搜索樹(shù)-javascript實(shí)現(xiàn)

<script type="text/javascript">
// <![CDATA[
 //打印輸出
 function println(msg) {
  document.write(msg + " ");
 }
 //節(jié)點(diǎn)類(lèi)
 var Node = function (v) {
  this.data = v; //節(jié)點(diǎn)值
  this.left = null; //左節(jié)點(diǎn)
  this.right = null; //右節(jié)點(diǎn)
 }
 //二叉搜索樹(shù)類(lèi)
 var BinarySearchTree = function () {
  this.root = null; //初始化時(shí),根節(jié)點(diǎn)為空
  //插入節(jié)點(diǎn)
  //參數(shù):v 為節(jié)點(diǎn)的值
  this.insert = function (v) {
   var newNode = new Node(v);
   if (this.root == null) {
    //樹(shù)為空時(shí),新節(jié)點(diǎn),直接成為根節(jié)點(diǎn)
    this.root = newNode;
    return;
   }
   var currentNode = this.root; //工作“指針”節(jié)點(diǎn)(從根開(kāi)始向下找)
   var parentNode = null;
   while (true) {
    parentNode = currentNode;
    if (v < currentNode.data) {
     //當(dāng)前節(jié)點(diǎn)的值 > 目標(biāo)節(jié)點(diǎn)的值     
     //應(yīng)該向左插,工作節(jié)點(diǎn)移到左節(jié)點(diǎn)
     currentNode = currentNode.left;
     if (currentNode == null) {
      //沒(méi)有左節(jié)點(diǎn),則新節(jié)點(diǎn),直接成為左節(jié)點(diǎn)
      parentNode.left = newNode;
      return; //退出循環(huán)
     }
    }
    else {
     //否則向右插,工作節(jié)點(diǎn)移到右節(jié)點(diǎn)
     currentNode = currentNode.right;
     if (currentNode == null) {
      parentNode.right = newNode;
      return;
     }
    }
   }
  }
  //查找最小節(jié)點(diǎn)
  this.min = function () {
   var p = this.root; //工作節(jié)點(diǎn) 
   while (p != null && p.left != null) {
    p = p.left;
   }
   return p;
  }
  //查找最大節(jié)點(diǎn)
  this.max = function () {
   var p = this.root; //工作節(jié)點(diǎn) 
   while (p != null && p.right != null) {
    p = p.right;
   }
   return p;
  }
  //中序遍歷
  this.inOrder = function (rootNode) {
   if (rootNode != null) {
    this.inOrder(rootNode.left); //先左節(jié)點(diǎn)
    println(rootNode.data); //再根節(jié)點(diǎn)
    this.inOrder(rootNode.right); //再右節(jié)點(diǎn)
   }
  }
  //先序遍歷
  this.preOrder = function (rootNode) {
   if (rootNode != null) {
    println(rootNode.data); //先根
    this.preOrder(rootNode.left); //再左節(jié)點(diǎn)
    this.preOrder(rootNode.right); //再右節(jié)點(diǎn)
   }
  }
  //后序遍歷
  this.postOrder = function (rootNode) {
   if (rootNode != null) {
    this.postOrder(rootNode.left); //先左節(jié)點(diǎn)
    this.postOrder(rootNode.right); //再右節(jié)點(diǎn)
    println(rootNode.data); //再根節(jié)點(diǎn)
   }
  }
 }
 //以下是測(cè)試
 var bTree = new BinarySearchTree();
 //《沙特.算法設(shè)計(jì)技巧與分析》書(shū)上圖3.9 左側(cè)的樹(shù)
 bTree.insert(6);
 bTree.insert(3);
 bTree.insert(8);
 bTree.insert(1);
 bTree.insert(4);
 bTree.insert(9);
 println('中序遍歷:')
 bTree.inOrder(bTree.root);
 println("<br/>");
 println("先序遍歷:");
 bTree.preOrder(bTree.root);
 println("<br/>");
 println("后序遍歷:");
 bTree.postOrder(bTree.root);
 println("<br/>");
 var minNode = bTree.min();
 println("最小節(jié)點(diǎn):" + (minNode == null ? "不存在" : minNode.data));
 println("<br/>");
 var maxNode = bTree.max();
 println("最大節(jié)點(diǎn):" + (maxNode == null ? "不存在" : maxNode.data));
// ]]>
</script>
<!--中序遍歷: 1 3 4 6 8 9 <br> 先序遍歷: 6 3 1 4 8 9 <br> 后序遍歷: 1 4 3 9 8 6 <br> 最小節(jié)點(diǎn):1 <br> 最大節(jié)點(diǎn):9-->

輸出結(jié)果:

中序遍歷: 1 3 4 6 8 9 
先序遍歷: 6 3 1 4 8 9 
后序遍歷: 1 4 3 9 8 6 
最小節(jié)點(diǎn):1 
最大節(jié)點(diǎn):9

希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • JavaScript單例模式實(shí)現(xiàn)自定義彈框

    JavaScript單例模式實(shí)現(xiàn)自定義彈框

    這篇文章主要為大家詳細(xì)介紹了JavaScript單例模式實(shí)現(xiàn)自定義彈框,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • 轉(zhuǎn)換layUI的數(shù)據(jù)表格中的日期格式方法

    轉(zhuǎn)換layUI的數(shù)據(jù)表格中的日期格式方法

    今天小編就為大家分享一篇轉(zhuǎn)換layUI的數(shù)據(jù)表格中的日期格式方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-09-09
  • Sourcemap源代碼映射詳細(xì)介紹

    Sourcemap源代碼映射詳細(xì)介紹

    這篇文章主要為大家介紹了Sourcemap源代碼映射介紹及示例詳解解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪<BR>
    2023-04-04
  • 網(wǎng)易JS面試題與Javascript詞法作用域說(shuō)明

    網(wǎng)易JS面試題與Javascript詞法作用域說(shuō)明

    Javascript函數(shù)在定義它們的作用域里運(yùn)行,而不是在執(zhí)行它們的作用域里運(yùn)行。
    2010-11-11
  • 刷新頁(yè)面實(shí)現(xiàn)方式總結(jié)(HTML,ASP,JS)

    刷新頁(yè)面實(shí)現(xiàn)方式總結(jié)(HTML,ASP,JS)

    多種方法實(shí)現(xiàn)頁(yè)面的刷新代碼
    2008-11-11
  • webpack+vue-cil中proxyTable處理跨域的方法

    webpack+vue-cil中proxyTable處理跨域的方法

    這篇文章主要介紹了webpack+vue-cil中proxyTable處理跨域的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • 原生js實(shí)現(xiàn)滑塊區(qū)間組件

    原生js實(shí)現(xiàn)滑塊區(qū)間組件

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)滑塊區(qū)間組件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-01-01
  • 使用 JavaScript 進(jìn)行函數(shù)式編程 (一) 翻譯

    使用 JavaScript 進(jìn)行函數(shù)式編程 (一) 翻譯

    本文是函數(shù)式編程系列的第一篇文章。這里我會(huì)簡(jiǎn)要介紹一下編程范式,然后會(huì)直接介紹使用 Javascript 進(jìn)行函數(shù)式編程的概念,因?yàn)?JavsScript 是最被認(rèn)可的函數(shù)式程序語(yǔ)言之一。我們鼓勵(lì)讀者通過(guò)參考資料部分進(jìn)一步了解這一迷人的概念
    2015-10-10
  • JavaScript幾種形式的樹(shù)結(jié)構(gòu)菜單

    JavaScript幾種形式的樹(shù)結(jié)構(gòu)菜單

    今天我主要講3種不同展示的JavaScript樹(shù)結(jié)構(gòu)菜單,分別是懸浮層樹(shù)(Tree)、右鍵菜單樹(shù)(ContextMenu)和節(jié)點(diǎn)樹(shù)(TreeMenu),目前都支持無(wú)限級(jí)層次。
    2010-05-05
  • 為指定元素增加樣式的js代碼

    為指定元素增加樣式的js代碼

    從此例子中發(fā)現(xiàn),js對(duì)"" 與 " " ,注意中間還有一空格,解析是非常嚴(yán)格的。在java與net中還有待于研究。
    2009-12-12

最新評(píng)論