Javascript二叉樹和二叉查找樹

樹是一種在計(jì)算機(jī)中廣泛應(yīng)用的非線性數(shù)據(jù)結(jié)構(gòu)香罐,數(shù)據(jù)以層次結(jié)構(gòu)存儲(chǔ)(hierarchical)筷频,磁盤的文件目錄就是典型的樹結(jié)構(gòu)筋粗。和字典不同集晚,樹支持對(duì)數(shù)據(jù)進(jìn)行有序存儲(chǔ)懊悯。
二叉樹是最典型的樹結(jié)構(gòu)蜓谋,其它類型的樹和其原理相似。相比線性結(jié)構(gòu)炭分,二叉樹的優(yōu)勢在于高效插入桃焕、刪除和查找。


二叉樹的js實(shí)現(xiàn)

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;
}

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 (true) {
             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;
                     }
              }
         } // end while
    }  // end else
}

function inOrder(node) {
    if (!(node==null)) {
        inOrder(node.left);
        print(node.show());
        inOrder(node.right);
    }
}

function preOrder(node) {
    if (!(node == null)) {
        print(node.show());
        preOrder(node.left);
        preOrder(node.right);
    }
}

function postOrder(node) {
   if (!(node == null)) {
      postOrder(node.left);
      postOrder(node.right);
      print(node.show());
   }
}

function getMin() {
    var cur = this.root;
    while(! (cur.left == null)) cur = cur.left;
    return cur.data;
}
 
function getMax() {
    var cur = this.root;
    while(!(cur.right==null)) cur = cur.right;
    return cur.data;
}
      
function find(data) {
    var cur = this.root;
    while(cur.data != data) {
        if (data < cur.data) {
            cur = cur.left;
        }
        else {
            cur = cur.right;
        }

        if (cur == null) {
            return null;
        }
    }
}
// 刪除節(jié)點(diǎn)
function remove(data) {
    this.root = removeNode(this.root, data);
}
// 遞歸實(shí)現(xiàn)
function removeNode(node, data) {
    if (node == null) {
        return null;
    }
    if (data == node.data) {
        //沒有孩子
        if (node.left == null && node.right == null) {
            return null;
        }
        // 只有左兒子
        if (node.left == null) {
            return node.right;
        }
        // 只有右兒子
        if (node.right == null) {
            return node.left;
        }
        // 有左右孩子
     var tmp = getSmallest(node.right);
        node.data = tmp.data;
        node.right = removeNode(node.right, tmp.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;
    }
}

function getSmallest(node) {
    var cur = node;
    while (cur.left != null) { cur = cur.left; }
    return cur;
}

注意樹的算法很多是遞歸實(shí)現(xiàn)的观堂,尤其注意樹的節(jié)點(diǎn)刪除算法,要清楚的考慮三種情況呀忧,即刪除的節(jié)點(diǎn)是否包含左右孩子师痕。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市而账,隨后出現(xiàn)的幾起案子胰坟,更是在濱河造成了極大的恐慌,老刑警劉巖福扬,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件腕铸,死亡現(xiàn)場離奇詭異惜犀,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)狠裹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門虽界,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人涛菠,你說我怎么就攤上這事莉御。” “怎么了俗冻?”我有些...
    開封第一講書人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵礁叔,是天一觀的道長。 經(jīng)常有香客問我迄薄,道長琅关,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任讥蔽,我火速辦了婚禮涣易,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘冶伞。我一直安慰自己新症,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開白布响禽。 她就那樣靜靜地躺著徒爹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪芋类。 梳的紋絲不亂的頭發(fā)上隆嗅,一...
    開封第一講書人閱讀 51,182評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音侯繁,去河邊找鬼榛瓮。 笑死,一個(gè)胖子當(dāng)著我的面吹牛巫击,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播精续,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼坝锰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了重付?” 一聲冷哼從身側(cè)響起顷级,我...
    開封第一講書人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎确垫,沒想到半個(gè)月后弓颈,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體帽芽,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年翔冀,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了导街。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡纤子,死狀恐怖搬瑰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情控硼,我是刑警寧澤泽论,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站卡乾,受9級(jí)特大地震影響翼悴,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜幔妨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一鹦赎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧陶冷,春花似錦钙姊、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至沾谜,卻和暖如春膊毁,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背基跑。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來泰國打工婚温, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人媳否。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓栅螟,卻偏偏與公主長得像,于是被迫代替她去往敵國和親篱竭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子力图,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 樹的概述 樹是一種非常常用的數(shù)據(jù)結(jié)構(gòu),樹與前面介紹的線性表掺逼,棧吃媒,隊(duì)列等線性結(jié)構(gòu)不同,樹是一種非線性結(jié)構(gòu) 1.樹的定...
    Jack921閱讀 4,452評(píng)論 1 31
  • 一些概念 數(shù)據(jù)結(jié)構(gòu)就是研究數(shù)據(jù)的邏輯結(jié)構(gòu)和物理結(jié)構(gòu)以及它們之間相互關(guān)系,并對(duì)這種結(jié)構(gòu)定義相應(yīng)的運(yùn)算赘那,而且確保經(jīng)過這...
    Winterfell_Z閱讀 5,781評(píng)論 0 13
  • 基于樹實(shí)現(xiàn)的數(shù)據(jù)結(jié)構(gòu)刑桑,具有兩個(gè)核心特征: 邏輯結(jié)構(gòu):數(shù)據(jù)元素之間具有層次關(guān)系; 數(shù)據(jù)運(yùn)算:操作方法具有Log級(jí)的平...
    yhthu閱讀 4,272評(píng)論 1 5
  • 英語四級(jí)第一天募舟。 從現(xiàn)在到三月四級(jí)核心詞匯全部掌握祠斧。 有道考神團(tuán)隊(duì)的課。 每天背125個(gè)單詞胃珍。 同時(shí)看韋氏字根詞典梁肿。
    你也是一只貓呀閱讀 159評(píng)論 0 0
  • 【1】 有一種無奈是年齡漸長吩蔑,年味卻越來越淡。那么填抬,年味究竟是什么呢烛芬?或許就是吃外婆做的年夜飯香味,是放鞭炮過后的...
    扶搖風(fēng)閱讀 1,188評(píng)論 11 25