日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[二叉树] 二叉树的最近公共祖先--leetcode236

發布時間:2023/12/15 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [二叉树] 二叉树的最近公共祖先--leetcode236 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

給定一個二叉樹, 找到該樹中兩個指定節點的最近公共祖先。

百度百科中最近公共祖先的定義為:“對于有根樹 T 的兩個節點 p、q,最近公共祖先表示為一個節點 x,滿足 x 是 p、q 的祖先且 x 的深度盡可能大(一個節點也可以是它自己的祖先)。”

?

?

解題思路:
祖先的定義: 若節點 pp 在節點 rootroot 的左(右)子樹中,或 p = rootp=root ,則稱 rootroot 是 pp 的祖先。

最近公共祖先的定義: 設節點 root為節點 p, q的某公共祖先,若其左子節點 root.left和右子節點 root.right都不是 p,q的公共祖先,則稱 root?是 “最近的公共祖先” 。

根據以上定義,若 root是 p, q的最近公共祖先 ,則只可能為以下情況之一:

  • p?和 q?在 root的子樹中,且分列 root?的 異側(即分別在左、右子樹中);
  • p = root,且 q 在 root 的左或右子樹中;
  • q = root,? 且 p 在 root?的左或右子樹中;
  • 考慮通過遞歸對二叉樹進行后序遍歷,當遇到節點 p?或 q 時返回。從底至頂回溯,當節點 p, q 在節點 root? 的異側時,節點 root 即為最近公共祖先,則向上返回 root

    遞歸解析:
    ?

    終止條件:

  • 當越過葉節點, 則直接返回 null
  • 當 root等于 p, q 則直接返回 root
  • 遞推工作:

  • 開啟遞歸左子節點,返回值記為 left
  • 開啟遞歸右子節點,返回值記為 right
  • 返回值: 根據 left 和 right ,可展開為四種情況;

  • 當 left 和 right 同時為空 :說明 root 的左 / 右子樹中都不包含 p,q,返回 null
  • 當 left 和 right 同時不為空 :說明 p, q 分列在 root 的異側 (分別在 左 / 右子樹),因此 root為最近公共祖先,返回 root
  • 當 left 為空 ,right為空 :p,q?都不在 root 的左子樹中,直接返回 right?。具體可分為兩種情況:?p,q 其中一個在 root 的 右子樹 中,此時 right 指向 p(假設為 p?);
    p,q兩節點都在 root 的 右子樹 中,此時的 right?指向最近公共祖先節點 ;
  • 當 left?不為空 , right 為空 :與情況 3. 同理;
  • ?

    ?

    # Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = Noneclass Solution:def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':if not root or root == p or root == q:return rootelse:left = self.lowestCommonAncestor(root.left, p, q)right = self.lowestCommonAncestor(root.right, p, q)if left and right: #一個在左子樹,一個在右子樹return rootelif left:#都在左子樹return leftelif right:#都在右子樹return rightelse:return

    ?

    總結

    以上是生活随笔為你收集整理的[二叉树] 二叉树的最近公共祖先--leetcode236的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。