Today, I have taken an interview from Wechat.
To be honest, this question is easy, but I do not have sufficient time to complete coding. Maybe I took too much time in same trivial points with the “VERY PROFESSIONAL” interviewer.
The actual question is find the lowest common ancestor of three given nodes, but I thought we can expend this question to N nodes. For testing this question rapidly, I reuse the previous code of constructing a binary tree by the in-order and post-order traversals.
# Definition for a binary tree node.
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution:
def buildTree(self, inorder, postorder):
if not inorder or not postorder:
return None
while postorder:
if postorder[-1] not in inorder:
postorder.pop()
else:
break
if len(postorder) == 1:
return TreeNode(postorder[0])
else:
node = TreeNode(postorder[-1])
in_index = inorder.index(postorder[-1])
node.left = self.buildTree(inorder[:in_index], postorder[:-1])
node.right = self.buildTree(inorder[in_index + 1:], postorder[:-1])
return node
def find(self, root, nodes):
if not root:
return None
else:
if root.val in nodes:
return root
left = self.find(root.left, nodes)
right = self.find(root.right, nodes)
if left and right:
return root
return right if not left else left
if __name__ == "__main__":
obj = Solution()
root = obj.buildTree([6, 5, 7, 2, 4, 3, 0, 1, 8], [6, 7, 4, 2, 5, 0, 8, 1, 3])
nodes = [0, 1, 8, 7]
result = obj.find(root, nodes)
print(result.val)