NO_4在二元树中找出和为某一值的所有路径

来源:互联网 发布:麦当劳改名金拱门知乎 编辑:程序博客网 时间:2024/06/06 04:37

题目博客:

http://blog.csdn.net/v_JULY_v/article/details/6057286

题目:

输入一个整数和一棵二元树。
从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。
打印出和与输入整数相等的所有路径。
例如 输入整数22和如下二元树
    10  
  /   /   
 5    12   
/ \     
4  7
则打印出两条路径:10, 12和10, 5, 7。

二元树节点的数据结构定义为:
struct BinaryTreeNode // a node in the binary tree
{
int m_nValue; // value of node
BinaryTreeNode *m_pLeft; // left child of node
BinaryTreeNode *m_pRight; // right child of node
};

代码为:

__author__ = 'Administrator'import copyclass TreeNode:    def __init__(self,value,leftChild=None,rightChild=None):        self.value=value        self.leftChild,self.rightChild=leftChild,rightChilddef print_load(root,value=22):    ps=print_loadwithold([[]],root,22)    for innerpath in  ps:        for inner_obj in innerpath:            print inner_obj.value,        printdef print_loadwithold(oldpath,curnode,leftvalue):    if leftvalue<0:        return None    else:        if not curnode:            return None        for innerpath in oldpath:                innerpath.append(curnode)        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 finalpathnode4=TreeNode(4)node7=TreeNode(7)node5=TreeNode(5,node4,node7)node12=TreeNode(12)node10=TreeNode(10,leftChild=node5,rightChild=node12)print_load(node10)import copyclass TreeNode:    def __init__(self,value,leftChild=None,rightChild=None):        self.value=value        self.leftChild,self.rightChild=leftChild,rightChilddef print_load(root,value=22):    ps=print_loadwithold([[]],root,22)    for innerpath in  ps:        for inner_obj in innerpath:            print inner_obj.value,        printdef print_loadwithold(oldpath,curnode,leftvalue):    if leftvalue<0:        return None    else:        if not curnode:            return None        for innerpath in oldpath:                innerpath.append(curnode)        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 finalpathnode4=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




0 0
原创粉丝点击