python打印二叉树所有路径的主函数怎样写

Python010

python打印二叉树所有路径的主函数怎样写,第1张

基本算法就是二叉树的遍历,首先想到的是深度优先遍历。

难点在于,如何实现每个子路径的记录和append

binaryTreePaths函数只给了root变量,无法存储每个子路径,考虑写辅助函数res,添加存储路径的变量

res(root,temp)

同时还需要一个全局变量result存储最后的输出结果,result.append(temp)

#!/usr/bin/python3

# -*- coding: utf-8 -*-

def print_tree(tree):

    buff = ['ROOT/']

    _print_tree(tree, buff, '', 0)

    print('\n'.join(buff))

def _print_tree(tree, buff, prefix, level):

    count = len(tree)

    for k, v in tree.items():

        count -= 1

        if v:

            buff.append('%s +- %s/' % (prefix, k))

            if count > 0:

                _print_tree(v, buff, prefix + ' |  ', level + 1)

            else:

                _print_tree(v, buff, prefix + '    ', level + 1)

        else:

            buff.append('%s +- %s' % (prefix, k))

def test():

    tree = {

        'bin': { 'bash': None, 'cat': None, 'cp': None, },

        'etc': {

            'init.d': { 'apache2':None, 'slapd':None, 'sshd':None, },

            'passwd': None,

            'hosts': None,

        },

        'var': {

            'log': {

                'apache2': { 'accesslog':None, 'errorlog': None, },

            },

        },

    }

    print_tree(tree)

if __name__ == '__main__':

    test()

输出结果:

ROOT/

 +- etc/

 |   +- passwd

 |   +- init.d/

 |   |   +- apache2

 |   |   +- sshd

 |   |   +- slapd

 |   +- hosts

 +- bin/

 |   +- cp

 |   +- bash

 |   +- cat

 +- var/

     +- log/

         +- apache2/

             +- errorlog

             +- accesslog

# -*- coding:utf-8 -*-def fromFMtoL( mid ): global las #全局后序遍历 global fir #先序遍历 root = fir[0] #取出当前树根 fir = fir[1:] #取出树根后 先序遍历把根拿出来 下面一个元素做树根 root_po = mid.find( root ) #在中序遍历当中树根的位置 left = mid[0:root_po] #左子树 right = mid[root_po+1:len(mid)] #右子树 ''' 后序遍历: 左 右 根 先左子树 再右子树 最后跟 ''' #有左子树的时候 if len(left) >0:fromFMtoL( left ) #有右子树的时候 if len(right) >0:fromFMtoL( right ) #树根写进结果 las += rootif __name__ == "__main__" : # fir = input("请输入先序遍历:") #前序遍历的结果 # mid = input("请输入中序遍历:") #中序遍历的结果 fir = "DBACEGF" mid = "ABCDEFG" # fir = "ABC" # mid = "BAC" las = "" fromFMtoL( mid ) print(las)