Swift-二叉查找樹判斷

題目:檢查一棵二叉樹是否為二叉查找樹.

解法一

中序遍歷之后荷愕,如果數(shù)組是有序露戒,那么二叉樹是二叉查找樹.
<pre><code>` func copyBST(root:TreeNode?,data:inout [String]) {
if root == nil {
return
}

    copyBST(root: root?.leftChild, data: &data)
    data.append(root!.data!)
    copyBST(root: root?.rightChild, data: &data)
}


func isBST(root:TreeNode?) -> Bool {
    if root == nil {
        return false
    }
    
    var data:[String] = []
    
    copyBST(root: root, data: &data)
    
    print("中序遍歷結(jié)果---\(data)")
    for i in 0..<data.count - 1 {
        
        if Int(data[i])! > Int(data[i + 1])!  {
            return false
        }
        
    }
    
    return true
}`</code></pre>

解法二

中序遍歷的數(shù)組其實(shí)可以不用腿准,只需要記錄最后一次訪問的數(shù)字即可夭问,如果當(dāng)前數(shù)字小于最小數(shù)字則不成功.
<pre><code>` var lastNum:Int = Int.min

func isBST2(root:TreeNode?) -> Bool {
    if  root == nil {
        return true
    }
    
    // 檢查左子樹
    if !isBST2(root: root?.leftChild) {
        return false
    }
    
    if Int(root!.data!)! <= lastNum {
        return false
    }
    
    // 檢查右子樹
    if !isBST2(root: root?.rightChild) {
        return false
    }
    
    return true
}`</code></pre>

解法三

二叉查找樹的節(jié)點(diǎn)左邊所有的節(jié)點(diǎn)值都小于本身的數(shù)值倡蝙,右邊的數(shù)值都大于本身的數(shù)值予颤,如果數(shù)字在最大值和最小值中間則是成功.
<pre><code>` func isBST3(root:TreeNode?) -> Bool {
return checkBST3(node: root, min: Int.min, max: Int.max)
}

func checkBST3(node:TreeNode?,min:Int,max:Int) -> Bool {
    if  node == nil {
        return true
    }
    
    let value:Int = Int(node!.data!)!
    
    if value < min || value >= max {
        return false
    }
    
    if !checkBST3(node: node?.leftChild, min: min, max: value) || !checkBST3(node: node?.rightChild, min: value, max: max){
        return false
    }
    
    return true
}`</code></pre>

測(cè)試代碼:
<pre><code>`var isBST:Bool = binarySearchTree.isBST(root: searchNode)

if isBST {
print("FlyElephant---是二叉查找樹")
} else {
print("FlyElephant---不是二叉查找樹")
}

var isBST2:Bool = binarySearchTree.isBST2(root: searchNode)

if isBST2 {
print("FlyElephant---是二叉查找樹")
} else {
print("FlyElephant---不是二叉查找樹")
}

var isBST3:Bool = binarySearchTree.isBST3(root: searchNode)

if isBST3 {
print("FlyElephant---是二叉查找樹")
} else {
print("FlyElephant---不是二叉查找樹")
}`</code></pre>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末旅敷,一起剝皮案震驚了整個(gè)濱河市生棍,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌媳谁,老刑警劉巖涂滴,帶你破解...
    沈念sama閱讀 211,561評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異晴音,居然都是意外死亡柔纵,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門锤躁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來搁料,“玉大人,你說我怎么就攤上這事系羞」疲” “怎么了?”我有些...
    開封第一講書人閱讀 157,162評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵椒振,是天一觀的道長(zhǎng)昭伸。 經(jīng)常有香客問我,道長(zhǎng)澎迎,這世上最難降的妖魔是什么庐杨? 我笑而不...
    開封第一講書人閱讀 56,470評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮嗡善,結(jié)果婚禮上辑莫,老公的妹妹穿的比我還像新娘。我一直安慰自己罩引,他們只是感情好各吨,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著袁铐,像睡著了一般揭蜒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上剔桨,一...
    開封第一講書人閱讀 49,806評(píng)論 1 290
  • 那天屉更,我揣著相機(jī)與錄音,去河邊找鬼洒缀。 笑死瑰谜,一個(gè)胖子當(dāng)著我的面吹牛欺冀,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播萨脑,決...
    沈念sama閱讀 38,951評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼隐轩,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了渤早?” 一聲冷哼從身側(cè)響起职车,我...
    開封第一講書人閱讀 37,712評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎鹊杖,沒想到半個(gè)月后悴灵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,166評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡骂蓖,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評(píng)論 2 327
  • 正文 我和宋清朗相戀三年积瞒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片登下。...
    茶點(diǎn)故事閱讀 38,643評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡赡鲜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出庐船,到底是詐尸還是另有隱情,我是刑警寧澤嘲更,帶...
    沈念sama閱讀 34,306評(píng)論 4 330
  • 正文 年R本政府宣布筐钟,位于F島的核電站,受9級(jí)特大地震影響赋朦,放射性物質(zhì)發(fā)生泄漏篓冲。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評(píng)論 3 313
  • 文/蒙蒙 一宠哄、第九天 我趴在偏房一處隱蔽的房頂上張望壹将。 院中可真熱鬧,春花似錦毛嫉、人聲如沸诽俯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽暴区。三九已至,卻和暖如春辛臊,著一層夾襖步出監(jiān)牢的瞬間仙粱,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工彻舰, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留伐割,地道東北人候味。 一個(gè)月前我還...
    沈念sama閱讀 46,351評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像隔心,于是被迫代替她去往敵國(guó)和親白群。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評(píng)論 2 348

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

  • 樹的概述 樹是一種非常常用的數(shù)據(jù)結(jié)構(gòu)济炎,樹與前面介紹的線性表川抡,棧,隊(duì)列等線性結(jié)構(gòu)不同须尚,樹是一種非線性結(jié)構(gòu) 1.樹的定...
    Jack921閱讀 4,442評(píng)論 1 31
  • 四耐床、樹與二叉樹 1. 二叉樹的順序存儲(chǔ)結(jié)構(gòu) 二叉樹的順序存儲(chǔ)就是用數(shù)組存儲(chǔ)二叉樹密幔。二叉樹的每個(gè)結(jié)點(diǎn)在順序存儲(chǔ)中都有...
    MinoyJet閱讀 1,512評(píng)論 0 7
  • 數(shù)據(jù)結(jié)構(gòu)和算法--二叉樹的實(shí)現(xiàn) 幾種二叉樹 1、二叉樹 和普通的樹相比撩轰,二叉樹有如下特點(diǎn): 每個(gè)結(jié)點(diǎn)最多只有兩棵子...
    sunhaiyu閱讀 6,433評(píng)論 0 14
  • 原文出處:http://www.cnblogs.com/maybe2030/p/4715035.html引文出處:...
    明教de教主閱讀 9,148評(píng)論 0 7
  • 1/ 我做為第二次參加2017年6月15日AACTP會(huì)議小感受: 總結(jié):準(zhǔn)時(shí)開場(chǎng)胯甩,流程順暢,亮點(diǎn)突出堪嫂,稍顯沉悶偎箫。 ...
    NANA0閱讀 172評(píng)論 0 0