t = { "contents" : 6,
      "left"  : { "contents" : 3,
                  "left"  : { "contents" : 8,
                              "left"  : { "contents" : 42,
                                          "left" : None,
                                          "right" : None },
                              "right" : None },
                  "right" : { "contents" : 7,
                              "left"  : None,
                              "right" : None } },
      "right" : { "contents" : 2,
                  "left"  : None,
                  "right" : { "contents" : 9,
                              "left"  : None,
                              "right" : None } } }

###

def getChildren(t):
    if t == None:
        return []
    
    result = []
    left = t["left"]
    if left != None:
        result.append(left["contents"])
    
    right = t["right"]
    if right != None:
        result.append(right["contents"])
    
    return result

###

def countNodes(t):
    print("In:", t)
    if t == None:
        print("Out:", 0)
        return 0
    else:
        leftCount = countNodes(t["left"])
        rightCount = countNodes(t["right"])
        print("Out:", leftCount + rightCount + 1)
        return leftCount + rightCount + 1

###
    
def countEvenNodes(t):
    if t == None:
        return 0
    else:
        if t["contents"] % 2 == 0:
            rootCount = 1
        else:
            rootCount = 0
        leftCount = countEvenNodes(t["left"])
        rightCount = countEvenNodes(t["right"])
        return leftCount + rightCount + rootCount

###
    
def listValues(t):
    if t == None:
        return []
    else:
        result = [] 
        result = result + listValues(t["left"]) # [42, 8, 3, 7]
        result = result + [ t["contents"] ]
        result = result + listValues(t["right"]) # [2, 9]
        return result
    
# Result for t: [42, 8, 3, 7, 6, 2, 9].