刷題系列 - 在給出二叉樹中兩個點,求出其最小共同父節點
繼續刷題,感覺刷題還有樂趣的,搞得都不想去研究量化策略了。如果以前讀書時候有這樣刷題網站,簡單而方便思考實現,估計我的計算機分數會好很多。
題目是在給出二叉樹中兩個點p,q,求出其最小共同父節點(LCA Lowest Common Ancestor),如下圖很好理解,比如5和1的共同父節點是3;6和7的最小共同父節點是5;而5和4的最小共同父節點是5本身。
考慮了一下,其實思路很簡答,首先用前序或者層級遍歷二叉樹得出節點佇列,因為前序和層級都是先遍歷父節點再子節點,這樣佇列後的節點的父節點一定存在佇列中。然後從後往前反序遍歷這個節點佇列,如果是給出p, q這兩個中的父節點,則替換為其父節點,如果p和q是同一個節點,就是其最小共同父節點。
程式碼如下,使用層級遍歷,遍歷的時候判斷是否已經讀取p,q;如果都讀取了停止遍歷,避免讀取不必要資料。
# 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': preNodeList = [] checkList = [root] count = 2 while count > 0: nextList = [] for node in checkList: preNodeList.append(node) if node == p or node == q: count = count -1 if count == 0: pass if node.left != None: nextList.append(node.left) if node.right != None: nextList.append(node.right) checkList = nextList while p!= q: currentNode = preNodeList.pop() if currentNode.right == p or currentNode.left == p: p = currentNode if currentNode.right == q or currentNode.left == q: q = currentNode return p
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22259926/viewspace-2675528/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 刷題系列 - 在二叉樹中,為每個節點關聯其右相鄰節點二叉樹
- 刷題系列 - 在二叉樹中查詢給出節點,並返回以該節點為根的樹二叉樹
- Java中在二叉搜尋樹中查詢節點的父節點Java
- 【vue】在二叉樹中根據子節點找出父節點路徑Vue二叉樹
- 783. 二叉搜尋樹節點最小距離
- 008,二叉樹的下一個節點二叉樹
- JZ-076-樹中兩個節點的最低公共祖先
- 快速求完全二叉樹的節點個數二叉樹
- Day16 | 104.二叉樹的最大深度 、111.二叉樹的最小深度 、222.完全二叉樹的節點個數二叉樹
- 刷題系列 - 給出前序和後序遍歷佇列,構造對應二叉樹佇列二叉樹
- 為什麼二叉樹中葉子節點個數等於度為2的節點個數+1二叉樹
- TCP 中的兩個細節點TCP
- 【JavaScript】前端演算法題(重建二叉樹、反向輸出連結串列每個節點)JavaScript前端演算法二叉樹
- 二叉樹任意兩個節點間的最大距離(Java,LeetCode 543二叉樹的直徑 遞迴)二叉樹JavaLeetCode遞迴
- LeetCode-222-完全二叉樹的節點個數LeetCode二叉樹
- 671. 二叉樹中第二小的節點二叉樹
- 程式碼隨想錄——二叉樹-11.完全二叉樹的節點個數二叉樹
- LeetCode——671. 二叉樹中第二小的節點LeetCode二叉樹
- leetcode------給定一個二叉樹和一個值sum,判斷是否有從根節點到葉子節點的節點值之和等於sum 的路徑,LeetCode二叉樹
- 二叉搜尋樹如何刪除節點
- 刷題系列 - 序列化和反序列化一個二叉樹二叉樹
- Kotlin 鏈式儲存的二叉樹中查詢節點Kotlin二叉樹
- 劍指offer 面試題 7 :二叉樹的下一個節點是什麼?面試題二叉樹
- 刷題系列 - Python判斷是否映象對稱二叉樹Python二叉樹
- 二叉樹的最小深度問題二叉樹
- 刷題系列 - Python用非遞迴實現二叉樹中序遍歷Python遞迴二叉樹
- 樹上最小點覆蓋的一類問題
- 刷題系列 - Python用遞迴實現求二叉樹深度Python遞迴二叉樹
- 刷題系列 - Python實現二叉樹按層級遍歷Python二叉樹
- 程式碼隨想錄演算法訓練營第第16天 | 104.二叉樹的最大深度 、111.二叉樹的最小深度、222.完全二叉樹的節點個數演算法二叉樹
- 程式碼隨想錄演算法訓練營第十六天 | 104.二叉樹的最大深度 111.二叉樹的最小深度 222.二叉樹的節點個數演算法二叉樹
- leetcode----給定一個二叉樹,返回該二叉樹由底層到頂層的層序遍歷,(從左向右,從葉子節點到根節點,一層一層的遍歷)LeetCode二叉樹
- 二叉樹父子節點下標位置關係證明二叉樹
- 到達二叉樹目標節點的完整路徑二叉樹
- 《劍指offer》之在完全二叉樹中新增子節點二叉樹
- 刷題系列 - 中序和後序遍歷佇列,構造對應二叉樹;佇列二叉樹
- 程式碼隨想錄 第十六天 | ● 104.二叉樹的最大深度 559.n叉樹的最大深度 ● 111.二叉樹的最小深度 ● 222.完全二叉樹的節點個數二叉樹
- 演算法題(三十五):二叉樹的下一個結點演算法二叉樹