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

JS實現(xiàn)二叉查找樹的建立以及一些遍歷方法實現(xiàn)

 更新時間:2017年04月17日 09:06:49   作者:DreamFJ  
本篇文章主要介紹了JS實現(xiàn)二叉查找樹的建立以及一些遍歷方法實現(xiàn),具有一定的參考價值,感興趣的小伙伴們可以參考一下。

二叉查找樹是由節(jié)點和邊組成的。

我們可以定義一個節(jié)點類Node,里面存放節(jié)點的數(shù)據(jù),及左右子節(jié)點,再定義一個用來顯示數(shù)據(jù)的方法:

//以下定義一個節(jié)點類
function Node(data,left,right){
  // 節(jié)點的鍵值
  this.data = data;
  // 左節(jié)點
  this.left = left;
  // 右節(jié)點
  this.right = left;
  // 顯示該節(jié)點的鍵值
  this.show = show;
}
// 實現(xiàn)show方法
function show(){
  return this.data;
}

再定義一個二叉查找樹類BST,該類中有定義樹的根節(jié)點,初始化為null,然后定義插入節(jié)點的方法,還有一邊遍歷的方法:

// 二叉查找樹BST
// 有一個節(jié)點屬性,還有一些其他的方法,以下定義一個二叉查找樹BST類
function BST(){
  // 根節(jié)點初始化為空
  this.root = null;
  // 方法
  // 插入
  this.insert = insert;
  // 中序遍歷
  this.inorder = inorder;
  // 先序遍歷
  this.preorder = preorder;
  // 后序遍歷
  this.postorder = postorder;
}

//實現(xiàn)insert插入方法
function insert(data){
  // 創(chuàng)建一個節(jié)點保存數(shù)據(jù)
  var node = new Node(data,null,null);
  // 下面將節(jié)點node插入到樹中
  // 如果樹是空的,就將節(jié)點設(shè)為根節(jié)點
  if(!this.root){
    this.root = node;
  }else{ //樹不為空
    // 判斷插在父節(jié)點的左邊還是右邊
    // 所以先要保存一下父節(jié)點
    // var parent = this.root;
    var current = this.root;
    var parent;
    // 如果要插入的節(jié)點鍵值小于父節(jié)點鍵值,則插在父節(jié)點左邊,
    // 前提是父節(jié)點的左邊為空,否則要將父節(jié)點往下移一層,
    // 然后再做判斷
    while(true){
      // data小于父節(jié)點的鍵值
      parent = current;
      if(data < parent.data){
        // 將父節(jié)點往左下移(插入左邊)
        // parent = parent.left;
        current = current.left;
        // 如果節(jié)點為空,則直接插入
        if(!current){
          // ?。?!此處特別注意,如果就這樣把parent賦值為node,也僅僅只是parent指向node,
          // 而并沒有加到父元素的左邊?。。「緵]有加到樹中去。所以要先記住父元素,再把當(dāng)前元素加入進去
          parent.left = node;
          break;
        }      
      }else{ // 將父節(jié)點往右下移(插入右邊)
        current = current.right;
        if(!current){
          parent.right = node;
          break;
        }
      }
    }

  }
} 

//實現(xiàn)inorder遍歷方法(左中右)
function inorder(node){
  if(node){
    inorder(node.left);
    console.log(node.show());
    inorder(node.right);
  }
}

// 先序遍歷(中左右)
function preorder(node){
  if(node){
    console.log(node.show());
    preorder(node.left);
    preorder(node.right);
  }
}

// 后序遍歷(左右中)
function postorder(node){
  if(node){
    preorder(node.left);
    preorder(node.right);
    console.log(node.show());
  }
}

測試:

// 后序遍歷(左右中)
function postorder(node){
  if(node){
    postorder(node.left);
    postorder(node.right);
    console.log(node.show());
  }
}

// 實例化一個BST樹
var tree = new BST();
// 添加節(jié)點
tree.insert(30);
tree.insert(14);
tree.insert(35);
tree.insert(12);
tree.insert(17);
// 中序遍歷
tree.inorder(tree.root);
// 先序遍歷
tree.preorder(tree.root);
// 后序遍歷
tree.postorder(tree.root);

 結(jié)果:

中序遍歷:

中序遍歷

先序遍歷:

先序遍歷

后序遍歷:

后序遍歷

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 簡單三步實現(xiàn)報表頁面集成天氣

    簡單三步實現(xiàn)報表頁面集成天氣

    本文主要介紹了基于javascript實現(xiàn)報表頁面集成天氣的方法步驟,簡單三步,一看就懂。具有很好的參考價值,需要的朋友一起來看下吧
    2016-12-12
  • js判斷鼠標(biāo)同時離開兩個div的思路及代碼

    js判斷鼠標(biāo)同時離開兩個div的思路及代碼

    js判斷鼠標(biāo)同時離開兩個div想了好長時間終于出爐了,下面與大家分享下具體的實現(xiàn)代碼,感興趣的朋友可以參考下啊
    2013-05-05
  • js實現(xiàn)簡單圓盤時鐘

    js實現(xiàn)簡單圓盤時鐘

    這篇文章主要為大家詳細(xì)介紹了js實現(xiàn)簡單圓盤時鐘,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • javascript數(shù)組中的map方法和filter方法

    javascript數(shù)組中的map方法和filter方法

    這篇文章主要介紹了javascript數(shù)組中的map方法和filter方法,文章內(nèi)容介紹詳細(xì),具有一定的參考價值,需要的小伙伴可以參考一下,希望對你的學(xué)習(xí)有所幫助
    2022-03-03
  • JavaScript中實現(xiàn)sprintf、printf函數(shù)

    JavaScript中實現(xiàn)sprintf、printf函數(shù)

    這篇文章主要介紹了JavaScript中實現(xiàn)sprintf、printf函數(shù),這兩個函數(shù)在大多數(shù)編程語言中都有,但JS中卻沒有,本文介紹在js中實現(xiàn)這兩個函數(shù)功能,需要的朋友可以參考下
    2015-01-01
  • uniapp原生tabbar設(shè)置并添加數(shù)字角標(biāo)或小紅點提示功能

    uniapp原生tabbar設(shè)置并添加數(shù)字角標(biāo)或小紅點提示功能

    這篇文章主要給大家介紹了關(guān)于uniapp原生tabbar設(shè)置并添加數(shù)字角標(biāo)或小紅點提示功能的相關(guān)資料,在相應(yīng)的頁面中完成對消息的處理,如果有新消息,則在tabBar頁面中顯示紅點提醒用戶,需要的朋友可以參考下
    2023-08-08
  • Bootstrap布局方式詳解

    Bootstrap布局方式詳解

    這篇文章主要為大家詳細(xì)介紹了Bootstrap布局方式,分析了Bootstrap網(wǎng)格系統(tǒng)的各種特性,感興趣的小伙伴們可以參考一下
    2016-05-05
  • js跨域和ajax 跨域問題的實現(xiàn)思路

    js跨域和ajax 跨域問題的實現(xiàn)思路

    大家都知道js是不能跨域的,但我們有時候就要這么用,怎么辦呢?辦法總是有的.
    2009-09-09
  • 詳解JS中常用的Fetch API

    詳解JS中常用的Fetch API

    Fetch API是一種用于進行網(wǎng)絡(luò)請求的現(xiàn)代JavaScript API,提供了更簡潔、強大和靈活的方式來處理異步數(shù)據(jù)交互,本文主要為大家介紹了js中js中基本用法,感興趣的同學(xué)可以參考下
    2023-07-07
  • js使用函數(shù)綁定技術(shù)改變事件處理程序的作用域

    js使用函數(shù)綁定技術(shù)改變事件處理程序的作用域

    在html頁面里面為某個元素的事件指定處理程序有很多種方式
    2011-12-12

最新評論

宁南县| 鄂托克前旗| 修文县| 锡林郭勒盟| 鄂伦春自治旗| 会东县| 鄂伦春自治旗| 连山| 晋宁县| 京山县| 长顺县| 武平县| 英山县| 尚义县| 石台县| 岳阳市| 吉首市| 两当县| 庆城县| 拉萨市| 丹寨县| 杭锦后旗| 泰兴市| 徐汇区| 英吉沙县| 班戈县| 西华县| 石首市| 顺义区| 镇雄县| 洪江市| 平罗县| 荥阳市| 加查县| 讷河市| 康定县| 永城市| 关岭| 双城市| 郑州市| 浪卡子县|