題目部落格:
題目:輸入乙個整數和一棵二元樹。
從樹的根結點開始往下訪問一直到葉結點所經過的所有結點形成一條路徑。
列印出和與輸入整數相等的所有路徑。
例如 輸入整數22和如下二元樹
10
/ /
5 12
/ \
4 7
則列印出兩條路徑:10, 12和10, 5, 7。
二元樹節點的資料結構定義為:
struct binarytreenode // a node in the binary tree
; **為:
__author__ = 'administrator'
import copy
class treenode:
def __init__(self,value,leftchild=none,rightchild=none):
self.value=value
self.leftchild,self.rightchild=leftchild,rightchild
def print_load(root,value=22):
ps=print_loadwithold(,root,22)
for innerpath in ps:
for inner_obj in innerpath:
print inner_obj.value,
print
def print_loadwithold(oldpath,curnode,leftvalue):
if leftvalue<0:
return none
else:
if not curnode:
return none
for innerpath in oldpath:
if curnode.value==leftvalue:
return oldpath
leftpath=print_loadwithold(copy.deepcopy(oldpath),curnode.leftchild,leftvalue-curnode.value)
rightpath=print_loadwithold(copy.deepcopy(oldpath),curnode.rightchild,leftvalue-curnode.value)
finalpath=
for path in (leftpath,rightpath):
if path:
finalpath.extend(path)
return finalpath
node4=treenode(4)
node7=treenode(7)
node5=treenode(5,node4,node7)
node12=treenode(12)
node10=treenode(10,leftchild=node5,rightchild=node12)
print_load(node10)
import copy
class treenode:
def __init__(self,value,leftchild=none,rightchild=none):
self.value=value
self.leftchild,self.rightchild=leftchild,rightchild
def print_load(root,value=22):
ps=print_loadwithold(,root,22)
for innerpath in ps:
for inner_obj in innerpath:
print inner_obj.value,
print
def print_loadwithold(oldpath,curnode,leftvalue):
if leftvalue<0:
return none
else:
if not curnode:
return none
for innerpath in oldpath:
if curnode.value==leftvalue:
return oldpath
leftpath=print_loadwithold(copy.deepcopy(oldpath),curnode.leftchild,leftvalue-curnode.value)
rightpath=print_loadwithold(copy.deepcopy(oldpath),curnode.rightchild,leftvalue-curnode.value)
finalpath=
for path in (leftpath,rightpath):
if path:
finalpath.extend(path)
return finalpath
node4=treenode(4)
node7=treenode(7)
node5=treenode(5,node4,node7)
node12=treenode(12)
node10=treenode(10,leftchild=node5,rightchild=node12)
print_load(node10)
使用字典存路徑:def getload(curnode,pre_dic,value=22,prenode=none):
if not curnode:
return none
else:
if prenode:
pre_dic[curnode.value]=prenode.value
else:
pre_dict[curnode.value]=-1
if curnode.value==value:
return [curnode.value]
elif curnode.value>value:
return none
else:
finallist=
for nodelist in (getload(curnode.leftchild,pre_dic,value-curnode.value,curnode),
getload(curnode.rightchild,pre_dic,value-curnode.value,curnode)):
if nodelist:
finallist.extend(nodelist)
return finallist
return none
4 在二元樹中找出和為某一值的所有路徑
題目 輸入乙個整數和一棵二元樹。從樹的根結點開始往下訪問一直到葉結點所經過的所有結點形成一條路徑。列印出和與輸入整數相等的所有路徑。例如輸入整數22和如下二元樹 10 5 12 4 7 則列印出兩條路徑 10,12和10,5,7。分析 考查對樹這種基本資料結構以及遞迴函式的理解。當訪問到某一結點時,...
4 在二元樹中找出和為某一值的所有路徑
4.在二元樹中找出和為某一值的所有路徑 題目 輸入乙個整數和一棵二元樹。從樹的根結點開始往下訪問一直到葉結點所經過的所有結點形成一條路徑。列印出和與輸入整數相等的所有路徑。例如輸入整數 22 和如下二元樹 10 5 12 4 7 則列印出兩條路徑 10,12 和 10,5,7。方法主要用回溯法和遞推...
在二元樹中找出和為某一值的所有路徑
4.在二元樹中找出和為某一值的所有路徑 題目 輸入乙個整數和一棵二元樹。從樹的根結點開始往下訪問一直到葉結點所經過的所有結點形成一條路徑。列印出和與輸入整數相等的所有路徑。例如 輸入整數22和如下二元樹 10 5 12 4 7則列印出兩條路徑 10,12和10,5,7。c codes as belo...