JavaScript數(shù)據(jù)結(jié)構(gòu)之二叉樹(shù)的刪除算法示例
本文實(shí)例講述了JavaScript數(shù)據(jù)結(jié)構(gòu)之二叉樹(shù)的刪除算法。分享給大家供大家參考,具體如下:
從二叉查找樹(shù)上刪除節(jié)點(diǎn)的操作復(fù)雜程度取決于刪除哪個(gè)節(jié)點(diǎn)。如果刪除沒(méi)有子節(jié)點(diǎn)的節(jié)點(diǎn)就非常簡(jiǎn)單,如果節(jié)點(diǎn)只有一個(gè)子節(jié)點(diǎn),不管是左子節(jié)點(diǎn)還是右子節(jié)點(diǎn),就變得稍微有點(diǎn)復(fù)雜,如果節(jié)點(diǎn)包含兩個(gè)子節(jié)點(diǎn)就最復(fù)雜。
如果待刪除節(jié)點(diǎn)是葉子節(jié)點(diǎn),那么只需要將從父節(jié)點(diǎn)指向它的鏈接指向null。
如果待刪除節(jié)點(diǎn)只包含一個(gè)子節(jié)點(diǎn),那么原本指向它的節(jié)點(diǎn)就得使其指向它的子節(jié)點(diǎn)。
如果待刪除節(jié)點(diǎn)包含兩個(gè)子節(jié)點(diǎn),那么我們可以采用兩種方式,一種是查找待刪除節(jié)點(diǎn)左子樹(shù)上的最大值,一種是查找待刪除節(jié)點(diǎn)右節(jié)點(diǎn)上的最小值。我們采取后者,找到最小值后,將臨時(shí)節(jié)點(diǎn)上的值復(fù)制到待刪除節(jié)點(diǎn),然后再刪除臨時(shí)節(jié)點(diǎn)。
刪除操作的代碼如下:
function getSmallest(node){//查找最小節(jié)點(diǎn) while(node.left!=null){ node=node.left; } return node; } function remove(data){ root=removeNode(this.root,data);//將根節(jié)點(diǎn)轉(zhuǎn)換 } function removeNode(node,data){ if(node==null){ return null; } if(data==node.data){ //如果沒(méi)有子節(jié)點(diǎn) if(node.right==null&&node.left==null){ return null;//直接將節(jié)點(diǎn)設(shè)為空 } //如果沒(méi)有左子節(jié)點(diǎn) if(node.left==null){ return node.right;//直接指向其右節(jié)點(diǎn) } //如果沒(méi)有右子節(jié)點(diǎn) if(node.right==null){ return node.left; } //如果有兩個(gè)節(jié)點(diǎn) if(node.right!=null&&node.left!=null){ var tempNode=getSmallest(node.right);//找到最小的右節(jié)點(diǎn) 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; } }
更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》、《JavaScript排序算法總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》、《JavaScript查找算法技巧總結(jié)》及《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》
希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。
- JS實(shí)現(xiàn)二叉查找樹(shù)的建立以及一些遍歷方法實(shí)現(xiàn)
- JavaScript數(shù)據(jù)結(jié)構(gòu)之二叉查找樹(shù)的定義與表示方法
- JavaScript數(shù)據(jù)結(jié)構(gòu)與算法之二叉樹(shù)實(shí)現(xiàn)查找最小值、最大值、給定值算法示例
- JavaScript實(shí)現(xiàn)二叉樹(shù)定義、遍歷及查找的方法詳解
- JavaScript數(shù)據(jù)結(jié)構(gòu)之二叉樹(shù)的查找算法示例
- JS實(shí)現(xiàn)的二叉樹(shù)算法完整實(shí)例
- JavaScript實(shí)現(xiàn)二叉樹(shù)的先序、中序及后序遍歷方法詳解
- javascript實(shí)現(xiàn)二叉樹(shù)遍歷的代碼
- Javascript實(shí)現(xiàn)從小到大的數(shù)組轉(zhuǎn)換成二叉搜索樹(shù)
- JavaScript實(shí)現(xiàn)的DOM樹(shù)遍歷方法詳解【二叉DOM樹(shù)、多叉DOM樹(shù)】
- JavaScript數(shù)據(jù)結(jié)構(gòu)之二叉樹(shù)的遍歷算法示例
- JS中的算法與數(shù)據(jù)結(jié)構(gòu)之二叉查找樹(shù)(Binary Sort Tree)實(shí)例詳解
相關(guān)文章
JavaScript中自帶的 reduce()方法使用示例詳解
下文小編給大家?guī)?lái)了js中自帶的reduce()方法使用示例詳解,非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起學(xué)習(xí)吧2016-08-08JS實(shí)現(xiàn)一個(gè)列表中包含上移下移刪除等功能
一個(gè)項(xiàng)目,包括了一個(gè)列表頁(yè)其中包括在列表中實(shí)現(xiàn)上移,下移,刪除等功能,為了用戶體驗(yàn),操作均使用JS實(shí)現(xiàn)2014-09-09詳解webpack loader和plugin編寫(xiě)
這篇文章主要介紹了詳解webpack loader和plugin編寫(xiě),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-10-10一個(gè)最簡(jiǎn)單的級(jí)聯(lián)下拉菜單
一個(gè)最簡(jiǎn)單的級(jí)聯(lián)下拉菜單...2006-12-12javascript實(shí)現(xiàn)蒙版與禁止頁(yè)面滾動(dòng)
這篇文章主要為大家詳細(xì)介紹了javascript實(shí)現(xiàn)蒙版與禁止頁(yè)面滾動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-01-01javascript iframe中打開(kāi)文件,并檢測(cè)iframe存在否
從iframe中打開(kāi)文件,并檢測(cè)iframe存在否如果說(shuō)只是檢測(cè)頁(yè)面存在否,直接設(shè)置target用偽協(xié)議就可以解決了...2008-12-12Chart.js 輕量級(jí)HTML5圖表繪制工具庫(kù)(知識(shí)整理)
這篇文章主要介紹了Chart.js 輕量級(jí)HTML5圖表繪制工具庫(kù),Chart.js基于HTML5 canvas技術(shù)支持所有現(xiàn)代瀏覽器,并且針對(duì)IE7/8提供了降級(jí)替代方案,感興趣的小伙伴們可以參考一下2018-05-05javascript顯示倒計(jì)時(shí)控制按鈕的簡(jiǎn)單實(shí)現(xiàn)
下面小編就為大家?guī)?lái)一篇javascript顯示倒計(jì)時(shí)控制按鈕的簡(jiǎn)單實(shí)現(xiàn)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-06-06