代碼隨想錄算法訓練營Day 19|235. 二叉搜索樹的最近公共祖先,701.二叉搜索樹中的插入操作,450.刪除二叉搜索樹中的節(jié)點

題目簡介

235. 二叉搜索樹的最近公共祖先
給定一個二叉搜索樹, 找到該樹中兩個指定節(jié)點的最近公共祖先。
百度百科中最近公共祖先的定義為:“對于有根樹 T 的兩個結點 p省核、q,最近公共祖先表示為一個結點 x,滿足 x 是 p、q 的祖先且 x 的深度盡可能大(一個節(jié)點也可以是它自己的祖先)⌒逭牛”

701.二叉搜索樹中的插入操作
給定二叉搜索樹(BST)的根節(jié)點 root 和要插入樹中的值 value ,將值插入二叉搜索樹关带。 返回插入后二叉搜索樹的根節(jié)點侥涵。 輸入數(shù)據(jù) 保證 ,新值和原始二叉搜索樹中的任意節(jié)點值都不同宋雏。

注意芜飘,可能存在多種有效的插入方式,只要樹在插入后仍保持為二叉搜索樹即可磨总。 你可以返回 任意有效的結果 嗦明。

450.刪除二叉搜索樹中的節(jié)點
給定一個二叉搜索樹的根節(jié)點 root 和一個值 key,刪除二叉搜索樹中的 key 對應的節(jié)點蚪燕,并保證二叉搜索樹的性質(zhì)不變娶牌。返回二叉搜索樹(有可能被更新)的根節(jié)點的引用。
一般來說馆纳,刪除節(jié)點可分為兩個步驟:
首先找到需要刪除的節(jié)點诗良;
如果找到了,刪除它厕诡。

初見思路

235.想二叉搜索樹的特性累榜,根節(jié)點左側均小于它,根節(jié)點右側均大于它灵嫌。從根節(jié)點向下遍歷壹罚,當節(jié)點p、q分別位于根節(jié)點左右兩側時寿羞,它是二者的最近公共祖先猖凛。

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
        lca = root
        while True:
            if p.val < lca.val and q.val < lca.val:
                lca = lca.left
            elif p.val > lca.val and q.val > lca.val:
                lca = lca.right
            else:
                break

        return lca

701.插入一個節(jié)點到BST中,如果值小于當前節(jié)點绪穆,一只向左插入直到作為葉子節(jié)點辨泳;大于當前節(jié)點則向右;如果值等于當前節(jié)點玖院,那么當前節(jié)點值返回;

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def insertIntoBST(self, root: Optional[TreeNode], val: int) -> Optional[TreeNode]:
        if not root:
            return TreeNode(val)

        if val < root.val:
            root.left = self.insertIntoBST(root.left, val)
        elif val > root.val:
            root.right = self.insertIntoBST(root.right, val)

        return root
  1. 這個題目的難點在于刪除的邏輯很隱晦菠红,并沒有刪除值,而是通過賦值的方式實現(xiàn)的难菌。重點是關注對于原子子樹(即根左右)试溯,刪除的邏輯到底是啥樣的。
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def deleteNode(self, root, key):
        if root is None:  # 如果根節(jié)點為空郊酒,直接返回
            return root
        if root.val == key:  # 找到要刪除的節(jié)點
            if root.right is None:  # 如果右子樹為空遇绞,直接返回左子樹作為新的根節(jié)點
                return root.left
            cur = root.right
            while cur.left:  # 找到右子樹中的最左節(jié)點
                cur = cur.left
            root.val, cur.val = cur.val, root.val 
        root.left = self.deleteNode(root.left, key)  
        root.right = self.deleteNode(root.right, key)  
        return root

復盤思路

https://programmercarl.com/0235.%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91%E7%9A%84%E6%9C%80%E8%BF%91%E5%85%AC%E5%85%B1%E7%A5%96%E5%85%88.html

https://programmercarl.com/0701.%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91%E4%B8%AD%E7%9A%84%E6%8F%92%E5%85%A5%E6%93%8D%E4%BD%9C.html

https://programmercarl.com/0450.%E5%88%A0%E9%99%A4%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91%E4%B8%AD%E7%9A%84%E8%8A%82%E7%82%B9.html

重點難點

BST的刪除還可以再看下键袱,多品,多讀摹闽。

今日收獲

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蹄咖,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子付鹿,更是在濱河造成了極大的恐慌澜汤,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件倘屹,死亡現(xiàn)場離奇詭異银亲,居然都是意外死亡,警方通過查閱死者的電腦和手機纽匙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門务蝠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人烛缔,你說我怎么就攤上這事馏段。” “怎么了践瓷?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵院喜,是天一觀的道長。 經(jīng)常有香客問我晕翠,道長喷舀,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任淋肾,我火速辦了婚禮硫麻,結果婚禮上,老公的妹妹穿的比我還像新娘樊卓。我一直安慰自己拿愧,他們只是感情好,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布碌尔。 她就那樣靜靜地躺著浇辜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪唾戚。 梳的紋絲不亂的頭發(fā)上柳洋,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天,我揣著相機與錄音叹坦,去河邊找鬼膳灶。 笑死,一個胖子當著我的面吹牛立由,可吹牛的內(nèi)容都是我干的轧钓。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼锐膜,長吁一口氣:“原來是場噩夢啊……” “哼毕箍!你這毒婦竟也來了?” 一聲冷哼從身側響起道盏,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤而柑,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后荷逞,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體媒咳,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年种远,在試婚紗的時候發(fā)現(xiàn)自己被綠了涩澡。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡坠敷,死狀恐怖妙同,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情膝迎,我是刑警寧澤粥帚,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站限次,受9級特大地震影響芒涡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜卖漫,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一费尽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧懊亡,春花似錦依啰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至鸯两,卻和暖如春闷旧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背钧唐。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工忙灼, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓该园,卻偏偏與公主長得像酸舍,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子里初,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348

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