闲来无事玩玩python,发现和c、perl有很多相近之处,基本语法很容易就掌握了,刚好看到一算法题,就拿来练练手。
题目:输入一个整数和一棵二元树。
从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。
例如 输入整数22和如下二元树
10
/ \
5 12
/ \
4 7
则打印出两条路径:10, 12和10, 5, 7。
class Treenode:
def __init__( self, data ):
self._data = data
self._left = None
self._right = None
def __str__( self ):
return str(self._data)
class Tree:
def __init__( self ):
self._rootNode = None
def insertNode( self, value ):
if self._rootNode is None:
self._rootNode = Treenode(value)
else:
self.insertNodeHelper(self._rootNode, value)
def insertNodeHelper( self, node, value ):
if value < node._data:
if node._left is None:
node._left = Treenode(value)
else:
self.insertNodeHelper(node._left, value)
else:
if node._right is None:
node._right = Treenode(value)
else:
self.insertNodeHelper(node._right,value)
cur_sum = 0
tree = Tree()
stack = []
def print_path(treeNode, pathsum):
global cur_sum
if treeNode is not None:
cur_sum += treeNode._data
stack.append(treeNode._data)
print_path(treeNode._left, pathsum)
print_path(treeNode._right, pathsum)
if cur_sum == pathsum and treeNode._left is None and treeNode._right is None:
print stack
cur_sum -= treeNode._data
stack.pop()
tree.insertNode(10)
tree.insertNode(12)
tree.insertNode(5)
tree.insertNode(4)
tree.insertNode(7)
print_path(tree._rootNode, 22)