0205leetcodeは5つのPythonの質問をブラシします

剣はoffer32-Iを指します

タイトルの説明:
バイナリツリーの各ノードを上から下に印刷し、同じレベルのノードを左から右の順に印刷します。

例:
ここに画像の説明を挿入
回答:

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

class Solution:
    def levelOrder(self, root: TreeNode) -> List[int]:
        temp=[root]
        ans=[]
        while len(temp)>0:
            if temp[0] is not None:
                ans.append(temp[0].val)
                temp.append(temp[0].left)
                temp.append(temp[0].right)
            temp.pop(0)
        return ans

剣はoffer33を指します

タイトルの説明:
整数配列を入力して、その配列が二分探索木のポストオーダートラバーサルの結果であるかどうかを判別します。そうである場合はtrueを返し、そうでない場合はfalseを返します。入力配列内の任意の2つの数値が互いに異なると仮定します。

例:
ここに画像の説明を挿入
回答:

class Solution:
    def verifyPostorder(self, postorder: List[int]) -> bool:
        if len(postorder)<=1:
            return True
        rootNum=postorder[-1]
        for idx in range(len(postorder)):
            if postorder[idx]>=rootNum:
                break
        left=postorder[:idx]
        right=postorder[idx:len(postorder)-1]
        for i in right:
            if i<rootNum:
                return False
        
        leftSign=self.verifyPostorder(left)
        rightSign=self.verifyPostorder(right)
        if leftSign and rightSign:
            return True
        return False

剣はoffer35を指します

トピックの説明:
複雑なリンクリストをコピーするには、copyRandomList関数を実装してください。複雑なリンクリストでは、各ノードには次のノードへの次のポインターと、リンクリスト内の任意のノードまたはnullへのランダムポインターがあります。

例:
ここに画像の説明を挿入
回答:

"""
# Definition for a Node.
class Node:
    def __init__(self, x: int, next: 'Node' = None, random: 'Node' = None):
        self.val = int(x)
        self.next = next
        self.random = random
"""
class Solution:
    def copyRandomList(self, head: 'Node') -> 'Node':
        if not head:
            return 
        cur=head
        # 1. 复制各节点,并构建拼接链表
        while cur:
            tmp = Node(cur.val)
            tmp.next = cur.next
            cur.next = tmp
            cur = tmp.next
        # 2. 构建各新节点的 random 指向
        cur = head
        while cur:
            if cur.random:
                cur.next.random = cur.random.next
            cur = cur.next.next
        # 3. 拆分两链表
        cur = res = head.next
        pre = head
        while cur.next:
            pre.next = pre.next.next
            cur.next = cur.next.next
            pre = pre.next
            cur = cur.next
        pre.next = None # 单独处理原链表尾节点
        return res      # 返回新链表头节点

剣はoffer36を指します

タイトルの説明:
二分探索木を入力し、二分探索木をソートされた循環二重リンクリストに変換します。新しいノードを作成できず、ツリー内のノードポインタのポイントのみを調整できる必要があります。

例:
ここに画像の説明を挿入
回答:

"""
# Definition for a Node.
class Node:
    def __init__(self, val, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right
"""
class Solution:
    def treeToDoublyList(self, root: 'Node') -> 'Node':
        def dfs(cur):
            if not cur: 
                return
            dfs(cur.left) # 递归左子树
            if self.pre: # 修改节点引用
                self.pre.right, cur.left = cur, self.pre
            else: # 记录头节点
                self.head = cur
            self.pre = cur # 保存 cur
            dfs(cur.right) # 递归右子树
        
        if not root: 
            return
        self.pre = None
        dfs(root)
        self.head.left, self.pre.right = self.pre, self.head
        return self.head

剣はoffer38を指します

タイトルの説明:
文字列を入力し、文字列内の文字のすべての順列を出力します。
この文字列配列は任意の順序で返すことができますが、重複する要素を含めることはできません。

例:
ここに画像の説明を挿入
回答:

class Solution:
    def permutation(self, s: str) -> List[str]:
        res = []
        t = []
        
        def dfs(subs):
            l = len(subs)
            if l == 1:
                t.append(subs)
                res.append(''.join(t))
                t.pop()
                return
            for i in range(l):
                if subs[i] in subs[:i]:
                    continue
                t.append(subs[i])
                dfs(subs[:i]+subs[i+1:])
                t.pop()
        dfs(s)
        return res
            

おすすめ

転載: blog.csdn.net/yeqing1997/article/details/113590277