Hi people
I am currently working to traverse a tree and do an inorder printing of the tree. Problem is my instructor wants parenthesis around the expressions not the individual numbers.

def printexp(tree):
    sVal=""
    if tree:
        sVal='( ' + printexp(tree.getLeft())
        sVal=sVal+str(tree.getRootValue())
        sVal= sVal+printexp(tree.getRight()) +' )'
    return sVal

That is the current code I have. Any ideas on how to have the parenthesis only on the expressions?

You must test wether the tree is a single value or not

def printexp(tree):
    left, right = tree.getLeft(), tree.getRight()
    sRoot = str(tree.getRootValue())
    if left or right:
        assert left and right
        return "(%s %s %s)" % (printexp(left), sRoot, printexp(right))
    else:
        return sRoot

Edited 6 Years Ago by Gribouillis: n/a

Gribouillis: Good point, the assert at line 5, instead of putting it in if, to spot the malformed tree!

Dear Gribouillis,
I tried your code. But the assert statement only tests if the node is a leaf or not. If the node is not a leaf, then AssertionException pops up.

def printexp(tree):
        
        
    if tree:
        printexp(tree.getLeft())
        if tree.getLeft()==None:
            print '( ',
        print str(tree.getRootValue()),
        printexp(tree.getRight())
        if tree.getRight()==None:
            print ' )'

Here is what I obtained currently.
calling the methods
r=buildParseTree( ' 3 + 4 ')
>>> printexp(r)
( + ( 4 )
after I initialize the parseTree, printexp method now does not print the 3. What happened?

3 is not printed only right at line 8. Are you sure you built leaf node for 3? Put print after creation of rootvalue.

Edited 6 Years Ago by pyTony: n/a

This article has been dead for over six months. Start a new discussion instead.