It seems that coding tests are conducted overseas in interviews with engineers, and in many cases, the main thing is to implement specific functions and classes according to the theme.
As a countermeasure, it seems that a site called Let Code will take measures.
A site that trains algorithmic power that can withstand coding tests that are often done in the home.
I think it's better to have the algorithm power of a human being, so I'll solve the problem irregularly and write down the method I thought at that time as a memo.
Leet Code Table of Contents Starting from Zero
Last time Leet Code Day 36 "155. Min Stack" starting from zero
Right now I'm solving the Top 100 Liked Questions Medium. I solved all Easy, so if you are interested, please go to the table of contents.
Twitter I'm doing it.
105. Construct Binary Tree from Preorder and Inorder Traversal
The difficulty level is Medium. Excerpt from Top 100 Liked Questions. Since Easy has been solved last time, I will solve Medium from this time.
The problem is that ʻinorder and
preorder` are given as arguments as the structure of the tree, so write an algorithm that builds a binary tree based on them.
preorder = [3,9,20,15,7] inorder = [9,3,15,20,7] Return the following binary tree:
3
/ \
9 20
/ \
15 7
# 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 buildTree(self, preorder: List[int], inorder: List[int]) -> TreeNode:
if not preorder or not inorder:
return None
preordersIndex = preorder[0]
Tree = TreeNode(preordersIndex)
inordersIndex = inorder.index(preordersIndex)
Tree.left = self.buildTree(preorder[1:inordersIndex+1],inorder[:inordersIndex])
Tree.right = self.buildTree(preorder[inordersIndex+1:],inorder[inordersIndex+1:])
return Tree
# Runtime: 216 ms, faster than 33.07% of Python3 online submissions for Construct Binary Tree from Preorder and Inorder Traversal.
# Memory Usage: 87.7 MB, less than 13.16% of Python3 online submissions for Construct Binary Tree from Preorder and Inorder Traversal.
Solved by recursion. Since the root part of TreeNode is fixed, I assigned it first, and then I divided Tree
into left and right and continued to assign it recursively.
By the way, there was a discuss that was written shorter than this, so I will post it here as well.
# 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 buildTree(self, preorder: List[int], inorder: List[int]) -> TreeNode:
if inorder:
ind = inorder.index(preorder.pop(0))
root = TreeNode(inorder[ind])
root.left = self.buildTree(preorder, inorder[0:ind])
root.right = self.buildTree(preorder, inorder[ind+1:])
return root
# Runtime: 164 ms, faster than 49.71% of Python3 online submissions for Construct Binary Tree from Preorder and Inorder Traversal.
# Memory Usage: 52.2 MB, less than 60.53% of Python3 online submissions for Construct Binary Tree from Preorder and Inorder Traversal.
Easy to read and fast ...! The person posting this answer is very helpful as they write mostly concise code in Python for any question.
Until Easy, if you could process one element, you could usually solve it, but with Medium, you need to process two or more elements well. I have to work harder.
I'd like to read more discuss, thank you.
Recommended Posts