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