计算根节点到叶子节点的所组成的数字(1247, 125, 1367)以及叶子节点到根节点组成的数字(7421, 521, 8631),其二叉树树型结构以下node
计算从根节点到叶子节点组成的数字,本质上来讲就是二叉树的先序便利的变形,只在每次递归遍历过程当中,将上一步计算的结果传到下一轮的递归预算中,其代码以下:app
1 class Tree(object): 2 3 def __init__(self, val): 4 self.value = '%s' % str(val) 5 self.value = val 6 self.lchild = None 7 self.rchild = None 8 9 def __str__(self): 10 returnList = [] 11 returnList.append(self) 12 for i in len(returnList): 13 node = returnList[i] 14 returnList.append(node.lchild) 15 returnList.append(node.rchild) 16 17 return str(returnList) 18 19 def _repr_(self): 20 return '<N:%s>' % self.value 21 22 def TreeSum(depth, value, tree): 23 if not tree.lchild and not tree.rchild: 24 print '%s value: %s' % (depth * '\t', value) 25 else: 26 #import pdb;pdb.set_trace() 27 if tree.lchild: 28 print '%sT%s->lchild --->>>' % (depth * '\t', tree.value) 29 TreeSum(depth+1, value * 10 + tree.lchild.value, tree.lchild) 30 if tree.rchild: 31 print '%sT%s->rchild %s' % (depth * '\t', tree.value, '--->>>'.decode().encode('GBK')) 32 TreeSum(depth+1, value * 10 + tree.rchild.value, tree.rchild) 33 34 def RTreeSum(depth, value, tree): 35 if tree.lchild or tree.rchild: 36 #import pdb;pdb.set_trace() 37 if tree.lchild: 38 print '%sT%s->lchild --->>>' % (depth * '\t', tree.lchild.value) 39 RTreeSum(depth+1, tree.lchild.value * pow(10, depth) + value, tree.lchild) 40 if tree.rchild: 41 print '%sT%s->rchild --->>>' % (depth * '\t', tree.rchild.value) 42 RTreeSum(depth+1, tree.rchild.value * pow(10, depth) + value, tree.rchild) 43 else: 44 print '%s value: %s' % (depth * '\t', value) 45 46 if __name__ == '__main__': 47 root = Tree(1) 48 t2 = Tree(2) 49 t3 = Tree(3) 50 t4 = Tree(4) 51 t5 = Tree(5) 52 t6 = Tree(6) 53 t7 = Tree(7) 54 t8 = Tree(8) 55 root.lchild = t2 56 root.rchild = t3 57 t2.lchild = t4 58 t2.rchild = t5 59 t3.lchild = None 60 t3.rchild = t6 61 t4.lchild = t7 62 t4.rchild = None 63 t6.rchild = t8 64 65 print 'Tree Sum:' 66 TreeSum(0, 1, root) 67 68 print 'Reverse Tree Sum:' 69 RTreeSum(1, 1, root)
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////ide
其中TreeSum是计算跟节点到叶子节点的数字组合, RTreeSum 是计算叶子节点到根节点的组合spa
输出结果以下:code
1 Tree Sum: 2 T1->lchild --->>> 3 T2->lchild --->>> 4 T4->lchild --->>> 5 value: 1247 6 T2->rchild --->>> 7 value: 125 8 T1->rchild --->>> 9 T3->rchild --->>> 10 T6->rchild --->>> 11 value: 1368 12 Reverse Tree Sum: 13 T2->lchild --->>> 14 T4->lchild --->>> 15 T7->lchild --->>> 16 value: 7421 17 T5->rchild --->>> 18 value: 521 19 T3->rchild --->>> 20 T6->rchild --->>> 21 T8->rchild --->>> 22 value: 8631