樹(shù) - 實(shí)現(xiàn)二叉排序樹(shù)(Java)

鏈表實(shí)現(xiàn)二叉樹(shù)的類型聲明(Java):

/**
 * 樹(shù)結(jié)構(gòu)
 */
public class TreeNode {

    int value;
    TreeNode leftTreeNode = null;
    TreeNode rightTreeNode = null;

    public TreeNode(int value) {
        this.value = value;
        this.leftTreeNode = null;
        this.rightTreeNode = null;
    }
}

二叉樹(shù)的構(gòu)建

public class BinaryTree {

    private TreeNode rootNode;//二叉樹(shù)的根節(jié)點(diǎn)

    public BinaryTree(int[] data) {
        for (int i = 0; i < data.length; i++) {
            addNodeToTree(data[I]);
        }
    }

    //將指定的值加入到二叉樹(shù)中的適當(dāng)?shù)墓?jié)點(diǎn)
    private void addNodeToTree(int value) {
        TreeNode currentNode = rootNode;
        if (rootNode == null) {//表示沒(méi)有根節(jié)點(diǎn)谬哀,建立根節(jié)點(diǎn)
            rootNode = new TreeNode(value);
            return;
        }
        //建立二叉樹(shù)
        while (true) {
            if (value < currentNode.value) {//在左子樹(shù)
                if (currentNode.leftTreeNode == null) {
                    currentNode.leftTreeNode = new TreeNode(value);
                    return;
                } else {
                    currentNode = currentNode.leftTreeNode;
                }
            } else {//在右子樹(shù)
                if (currentNode.rightTreeNode == null) {
                    currentNode.rightTreeNode = new TreeNode(value);
                    return;
                } else {
                    currentNode = currentNode.rightTreeNode;
                }
            }
        }
    }
}

調(diào)用(Kotlin寫法):

var data: IntArray = intArrayOf(6, 3, 5, 9, 7, 8, 4, 2)
BinaryTree(data)

二叉樹(shù)構(gòu)建過(guò)程分解:

第一步:i = 0 围橡,value = 6 哮缺, rootNode = null 創(chuàng)建一個(gè)value=6的節(jié)點(diǎn)荤崇,rootNode = 6

第二步:i = 1 ,value = 3 津函, rootNode值為6本辐,value < rootNode 潮太,放rootNode的左側(cè),而rootNode.leftTreeNode = null 所以創(chuàng)建一個(gè)value=3的節(jié)點(diǎn),賦值給rootNode的leftTreeNode

第三步:i = 2 谆构,value = 5 裸扶, rootNode值為6,value < rootNode 搬素,放rootNode的左側(cè)呵晨,然而 rootNode.leftTreeNode有值 =3 ,則value 與 rooNode.leltTreeNode進(jìn)行比較熬尺。將rooNode.leltTreeNode 賦值給currtentNode ,此次循環(huán)執(zhí)行完成摸屠,重新進(jìn)入循環(huán),此時(shí)currtentNode = 3 粱哼,value > currtentNode.value 則創(chuàng)建一個(gè)value=5的節(jié)點(diǎn),賦值給currtentNode的rightTreeNode

第四步:i = 3 季二,value = 9 , rootNode值為6揭措,value > rootNode 胯舷,放rootNode的右側(cè),rootNode.rightTreeNode = null 創(chuàng)建一個(gè)value=3的節(jié)點(diǎn),賦值給rootNode的rightTreeNode

第五步:i = 4 绊含,value = 7 需纳, rootNode值為6,value > rootNode 艺挪,放rootNode的右側(cè)不翩,然而 rootNode.rightTreeNode 有值,則value 與 rootNode.rightTreeNode進(jìn)行比較麻裳,將rootNode.rightTreeNode 賦值給currtentNode ,此次循環(huán)執(zhí)行完成口蝠,重新進(jìn)入循環(huán),此時(shí)currtentNode = 9 津坑,value < currtentNode.value 則創(chuàng)建一個(gè)value=7的節(jié)點(diǎn),賦值給currtentNode的leftTreeNode

第六步:i = 5 妙蔗,value = 8 , rootNode值為6疆瑰,value > rootNode 眉反,放rootNode的右側(cè)昙啄,然而 rootNode.rightTreeNode 有值,則value 與 rootNode.rightTreeNode進(jìn)行比較寸五,將rootNode.rightTreeNode 賦值給currtentNode ,此次循環(huán)執(zhí)行完成梳凛,重新進(jìn)入循環(huán),此時(shí)currtentNode = 9 梳杏,value < currtentNode.value 然而currtentNode.leftTreeNode有值 = 7 韧拒,所以將currentNode.leftTreeNode賦值給currentNode, 此次循環(huán)執(zhí)行完成,重新進(jìn)入循環(huán)十性,此時(shí)currtentNode = 7 叛溢,value > currtentNode.value 則創(chuàng)建一個(gè)value=8的節(jié)點(diǎn),賦值給currtentNode的rightTreeNode

第七步:i = 6 ,value = 4 劲适, rootNode值為6楷掉,value < rootNode ,放rootNode的左側(cè)霞势,然而 rootNode.leftTreeNode有值靖诗,則value 與 rooNode.leltTreeNode進(jìn)行比較,將rooNode.leltTreeNode 賦值給currtentNode ,此次循環(huán)執(zhí)行完成支示,重新進(jìn)入循環(huán)刊橘,此時(shí)currtentNode = 3 ,value > currtentNode.value 颂鸿,而currtentNode.value = 5促绵,則重新將currtentNode.value 賦值給currtentNode,此次循環(huán)執(zhí)行完成,重新進(jìn)入循環(huán)嘴纺,此時(shí)currtentNode = 5 败晴,value < currtentNode.value 則創(chuàng)建一個(gè)value=4的節(jié)點(diǎn),賦值給currtentNode的leftTreeNode

第八步:i = 7 ,value = 2 栽渴, rootNode值為6尖坤,value < rootNode ,放rootNode的左側(cè)闲擦,然而 rootNode.leftTreeNode有值慢味,則value 與 rooNode.leltTreeNode進(jìn)行比較,將rooNode.leltTreeNode 賦值給currtentNode ,此次循環(huán)執(zhí)行完成墅冷,重新進(jìn)入循環(huán)纯路,此時(shí)currtentNode = 3 ,value < currtentNode.value 則創(chuàng)建一個(gè)value=2的節(jié)點(diǎn),賦值給currtentNode的rightTreeNode
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末寞忿,一起剝皮案震驚了整個(gè)濱河市驰唬,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖叫编,帶你破解...
    沈念sama閱讀 218,607評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件辖佣,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡搓逾,警方通過(guò)查閱死者的電腦和手機(jī)卷谈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)恃逻,“玉大人,你說(shuō)我怎么就攤上這事藕施】芩穑” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 164,960評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵裳食,是天一觀的道長(zhǎng)矛市。 經(jīng)常有香客問(wèn)我,道長(zhǎng)诲祸,這世上最難降的妖魔是什么浊吏? 我笑而不...
    開(kāi)封第一講書人閱讀 58,750評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮救氯,結(jié)果婚禮上找田,老公的妹妹穿的比我還像新娘。我一直安慰自己着憨,他們只是感情好墩衙,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,764評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著甲抖,像睡著了一般漆改。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上准谚,一...
    開(kāi)封第一講書人閱讀 51,604評(píng)論 1 305
  • 那天挫剑,我揣著相機(jī)與錄音,去河邊找鬼柱衔。 笑死樊破,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的唆铐。 我是一名探鬼主播捶码,決...
    沈念sama閱讀 40,347評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼或链!你這毒婦竟也來(lái)了惫恼?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,253評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤澳盐,失蹤者是張志新(化名)和其女友劉穎祈纯,沒(méi)想到半個(gè)月后令宿,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,702評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡腕窥,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,893評(píng)論 3 336
  • 正文 我和宋清朗相戀三年粒没,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片簇爆。...
    茶點(diǎn)故事閱讀 40,015評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡癞松,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出入蛆,到底是詐尸還是另有隱情响蓉,我是刑警寧澤,帶...
    沈念sama閱讀 35,734評(píng)論 5 346
  • 正文 年R本政府宣布哨毁,位于F島的核電站枫甲,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏扼褪。R本人自食惡果不足惜想幻,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,352評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望话浇。 院中可真熱鬧脏毯,春花似錦、人聲如沸幔崖。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,934評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)岖瑰。三九已至叛买,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蹋订,已是汗流浹背率挣。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,052評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留露戒,地道東北人椒功。 一個(gè)月前我還...
    沈念sama閱讀 48,216評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像智什,于是被迫代替她去往敵國(guó)和親动漾。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,969評(píng)論 2 355

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