Python實現二叉樹的前序遍歷、中序遍歷

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

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////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
相關文章
相關標籤/搜索