Tencent 39-二分探索木の最も近い公の祖先

Tencent 39-二分探索木の最も近い公の祖先

二分探索木を与えられて、木で指定された2つのノードの最も近い共通の祖先を見つけます。

Baidu Encyclopediaの最新の公開祖先の定義は次のとおりです。「ルート化ツリーTの2つのノードpおよびqの場合、最新の公開祖先はノードxとして表され、xはpおよびqの祖先であり、xの深さは可能な限り大きい(ノードはそれ自身の祖先になることもできます)。 "

たとえば、次のバイナリ検索ツリーがあるとします。root = [6,2,8,0,4,7,9、null、null、3,5]
ここに画像の説明を挿入
例1:

入力:root = [6,2,8,0,4,7,9、null、null、3,5]、p = 2、q = 8
出力:6
説明:ノード2とノード8の最も近い共通の祖先は6。
例2:

入力:ルート= [6,2,8,0,4,7,9、null、null、3,5]、p = 2、q = 4
出力:2
説明:ノード2とノード4の最も近い共通の祖先はこれは、定義により、最も近い共通の祖先ノードがノード自体になる可能性があるためです。

説明:

すべてのノードの値は一意です。
pとqは異なるノードであり、すべて指定された二分探索木に存在します。

1,因为是bst,还是利用bst的性质,就是结点比左结点大,比右结点小,所以当本结点介于所需两值之间,根结点极为所求。
2,否则,判断进入左节点还是右结点
3,停止条件,因为题干给出了p、q 为不同节点且均存在于给定的二叉搜索树中。即没什么停止条件了

3行のコード

# 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':
        ##因为是bst,还是利用bst的性质,就是结点比左结点大,比右结点小,所以当本结点介于所需两值之间,根结点极为所求。
        ##否则,判断进入左节点还是右结点
        ##停止条件,因为题干给出了p、q 为不同节点且均存在于给定的二叉搜索树中。即没什么停止条件了
        if (p.val<=root.val and root.val<=q.val) or (q.val<=root.val and root.val<=p.val):
            return root
        elif p.val<root.val and q.val<root.val:
            return self.lowestCommonAncestor(root.left, p, q) 
        else:
            return self.lowestCommonAncestor(root.right, p, q) 
93件の元の記事を公開 賞賛8 10,000以上のビュー

おすすめ

転載: blog.csdn.net/zlb872551601/article/details/103650866