NO 4在二元樹中找出和為某一值的所有路徑

2021-06-22 04:57:32 字數 3336 閱讀 3865

題目部落格:

題目:輸入乙個整數和一棵二元樹。

從樹的根結點開始往下訪問一直到葉結點所經過的所有結點形成一條路徑。

列印出和與輸入整數相等的所有路徑。

例如 輸入整數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...