I need to definea function make_tree(preorder, inorder). This function returns the Node which is the root of a binary tree with the pre-order and in-order traversals given as lists of values in the parameters.

If either preorder or inorder is empty, the other must also be empty, and the function's return value is None.

Assume that the parameters represent correct pre-order and in-order traversals of the same binary tree.

My codes are as follows:

class Node(object):
    ''''A binary tree node.
    def __init__(self, key):
        """A Node with the given key."""
        self.key = key
        self.left = None
        self.right = None

_ _ _ _ _ _ _ _ _ _ _

import Node
def make_tree(preorder, inorder):
    if (preorder[0] or inorder[0]) is None:
    if (len(preorder) == 1) and (preorder == inorder):
        return preorder[0]
    if preorder is not None:
        Node.key = preorder[0]
        i1 = inorder.index(preorder[0])
        i2 = preorder.index(inorder[i1 + 1])
        if (i2 == 1) or (i1 == 0):
            return None
        Node.left = make_tree(preorder[1:i2], inorder[:i1])
        Node.right = make_tree(preorder[i2:], inorder[i1 + 1:])
    return Node

How can I fix my codes?

Thank you for your time :)

Edited by vegaseat: added code tags

8 Years
Discussion Span
Last Post by bron92

There is a discrepancy in these 2 statements. Is preorder a list, so preorder[0] can be None, or is preorder a string, i.e the second statement below?

if (preorder[0] or inorder[0]) is None: 
    if preorder is not None:

Edited by woooee: n/a


hey eva, I looked at your code and it looks right to me, I'm interested in knowing what change have you made to your code to fix the error



Hey guys I'm having the same problem. What is wrong with eva's code?
Eva, can you post the final solution?

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.