計算根節點到葉子節點的所組成的數字(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