BST (Binary Search Tree)

Some data structures and algorithms related to binary search trees. (implemented by JavaScript)

class Node {
    constructor(data) {
        this.data = data
        this.left = null
        this.right = null
    }
}

class Tree {
    constructor(data) {
        if (data) {
            this.root = new Node(data)
        } else {
            this.root = null
        }
    }

    insertNode(data) {
        if (this.root) {
            insertData(this.root, data)
        } else {
            this.root = new Node(data)
        }
    }
}

function insertData(node, data) {
    if (data < node.data) {
        if (node.left) {
            insertData(node.left, data)
        } else {
            node.left = new Node(data)
        }
    } else {
        if (node.right) {
            insertData(node.right, data)
        } else {
            node.right = new Node(data)
        }
    }
}

function preorder(node) {
    if (node) {
        console.log(node.data)
        preorder(node.left)
        preorder(node.right)
    }
}

function inorder(node) {
    if (node) {
        inorder(node.left)
        console.log(node.data)
        inorder(node.right)
    }
}

function getHeight(node) {
    if (node) {
        let leftHeight = getHeight(node.left)
        let rightHeight = getHeight(node.right)
        if (leftHeight > rightHeight) {
            return leftHeight + 1
        } else {
            return rightHeight + 1
        }
    } else {
        return 0
    }
}

function getMax(node) {
    if (node) {
        let leftMax = getMax(node.left)
        let rightMax = getMax(node.right)
        let max = node.data

        if (leftMax > max) {
            max = leftMax
        }
        if (rightMax > max) {
            max = rightMax
        }

        return max
    } else {
        return -1
    }
}

let tree = new Tree()
let arr = [6, 3, 8, 2, 5, 1, 7]
arr.forEach(e => {
    tree.insertNode(e)
})
// preorder(tree.root) //6, 3, 2, 1, 5, 8, 7
// inorder(tree.root)
// console.log(getHeight(tree.root)) // 4
console.log(getMax(tree.root))
  • Construct Binary Tree from Preorder and Inorder
class Node {
    constructor(data) {
        this.data = data
        this.left = null
        this.right = null
    }
}

function reconstruct(preorder, inorder) {
    if (preorder.length > 0) {
        let data = preorder[0]
        let index = inorder.indexOf(data)
        let node = new Node(data)
        node.left = reconstruct(preorder.slice(1, index + 1), inorder.slice(0, index))
        node.right = reconstruct(preorder.slice(index + 1), inorder.slice(index + 1))

        return node
    } else {
        return null
    }
}

function preorder(node) {
    if (node) {
        console.log(node.data)
        preorder(node.left)
        preorder(node.right)
    }
}

function inorder(node) {
    if (node) {
        inorder(node.left)
        console.log(node.data)
        inorder(node.right)
    }
}

let root = reconstruct([1, 2, 4, 7, 3, 5, 6, 8], [4, 7, 2, 1, 5, 3, 8, 6])
// preorder(root)
inorder(root)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末兜材,一起剝皮案震驚了整個濱河市肯骇,隨后出現(xiàn)的幾起案子艘儒,更是在濱河造成了極大的恐慌谆沃,老刑警劉巖漫雕,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異强品,居然都是意外死亡辉懒,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門钱烟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來晰筛,“玉大人,你說我怎么就攤上這事拴袭《恋冢” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵拥刻,是天一觀的道長怜瞒。 經(jīng)常有香客問我,道長般哼,這世上最難降的妖魔是什么吴汪? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮蒸眠,結(jié)果婚禮上漾橙,老公的妹妹穿的比我還像新娘。我一直安慰自己楞卡,他們只是感情好霜运,可當(dāng)我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布脾歇。 她就那樣靜靜地躺著,像睡著了一般觉渴。 火紅的嫁衣襯著肌膚如雪介劫。 梳的紋絲不亂的頭發(fā)上徽惋,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天案淋,我揣著相機(jī)與錄音,去河邊找鬼险绘。 笑死踢京,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的宦棺。 我是一名探鬼主播瓣距,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼代咸!你這毒婦竟也來了蹈丸?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤呐芥,失蹤者是張志新(化名)和其女友劉穎逻杖,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體思瘟,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡荸百,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了滨攻。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片够话。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖光绕,靈堂內(nèi)的尸體忽然破棺而出女嘲,到底是詐尸還是另有隱情,我是刑警寧澤诞帐,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布欣尼,位于F島的核電站,受9級特大地震影響景埃,放射性物質(zhì)發(fā)生泄漏媒至。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一谷徙、第九天 我趴在偏房一處隱蔽的房頂上張望拒啰。 院中可真熱鬧,春花似錦完慧、人聲如沸谋旦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽册着。三九已至拴孤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間甲捏,已是汗流浹背演熟。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留司顿,地道東北人芒粹。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像大溜,于是被迫代替她去往敵國和親化漆。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,713評論 2 354

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

  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi閱讀 7,325評論 0 10
  • 希望多年以后钦奋,你想起我的時候能面帶微笑 有些東西太珍貴座云,以至于擁有后,就想一直握在手里付材,害怕失去于是患得患失朦拖,最后...
    95d3b723f913閱讀 150評論 0 0
  • 高銘玉閱讀 156評論 0 0
  • 活著 送孩子去舞蹈班上課,聽一個家長講起她朋友的故事伞租,讓我的心里非常不是滋味贞谓。 ...
    夏天的暖陽閱讀 259評論 0 0
  • I'd like to try,try every way I can. When the sun is neve...
    半下閱讀 280評論 0 3