博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python打印二叉树的左视图、右视图
阅读量:4300 次
发布时间:2019-05-27

本文共 3130 字,大约阅读时间需要 10 分钟。

 

先求出二叉树的最大深度,然后求出每一层的节点列表,求每一层节点列表就相当于求距离根节点指定深度的所有节点,再将每一层的节点列表中的最左或最右节点打印出来,或者添加到新列表中,就是二叉树的左视图、右视图了。。。 

class Node():    def __init__(self,value,lchild=None,rchild=None,):        self.value=value        self.lchild=lchild        self.rchild=rchild    def __repr__(self):        return str(self.value)class Tree():    def __init__(self,root=None):        self.root=root        self.node_list=[]    def add_node(self,node):        self.node_list.append(node)        temp_list=[]        temp_list.append(self.root)        if self.root == None:            self.root=node        else:            while temp_list:                cur_node=temp_list.pop(0)                if not cur_node.lchild:                    cur_node.lchild=node                    return                elif not cur_node.rchild:                    cur_node.rchild=node                    return                else:                    temp_list.append(cur_node.lchild)                    temp_list.append(cur_node.rchild)    #Depth First Search 深度优先 三种遍历方式    def preorder(self, root,):        """递归实现先序遍历"""        if root == None:            return        print (root.value)        self.preorder(root.lchild)        self.preorder(root.rchild)    def inorder(self, root):        """递归实现中序遍历"""        if root == None:            return        self.inorder(root.lchild)        print(root.value)        self.inorder(root.rchild)    def postorder(self, root):        """递归实现后序遍历"""        if root == None:            return        self.postorder(root.lchild)        self.postorder(root.rchild)        print(root.value)    #Breadth First Search 广度优先搜索    def bfs(self,root):        temp_list=[]        temp_list.append(root)        while temp_list:            cur_node=temp_list.pop()            print(cur_node.value)            if cur_node.lchild:                temp_list.insert(0,cur_node.lchild)            if cur_node.rchild:                temp_list.insert(0,cur_node.rchild)    #找到距离根节点指定距离的所有节点    def find_target_length(self,root,n,target_list=[]):        if n==0:            target_list.append(root)            # print(self.target_list)            # return target_list        if root.lchild:            self.find_target_length(root.lchild,n-1,target_list)        if root.rchild:            self.find_target_length(root.rchild,n-1,target_list)        return target_list    #二叉树的最大深度    def find_max_deep(self,root):        if (not root.lchild) and (not root.rchild):            return 1        if root.lchild:            lenght1=self.find_max_deep(root.lchild)        else:            lenght1=0        if root.rchild:            lenght2 =self.find_max_deep(root.rchild)        else:            lenght2=0        return 1+max(lenght1,lenght2)    #二叉树的左视图    def find_left_view(self,root):        deep_list=[]        out_put_list=[]        max_deep=self.find_max_deep(root)        print('max_deep:',max_deep)        cur_deep=0        while cur_deep

 

从代码可看出二叉树的形状如下:

左视图自然是1、2、4、6,右视图1、3、5、6

左视图打印结果: 

max_deep: 4

[1]
[2, 3]
[4, 5]
[6]
[[1], [2, 3], [4, 5], [6]]
[1, 2, 4, 6]

1、2、4、6就是树的左视图了。 

右视图打印结果:

[1]

[2, 3]
[4, 5]
[6]
[[1], [2, 3], [4, 5], [6]]
[1, 3, 5, 6]

转载地址:http://ucxws.baihongyu.com/

你可能感兴趣的文章
回测引擎代码分析流程图
查看>>
Excel 如何制作时间轴
查看>>
股票网格交易策略
查看>>
matplotlib绘图跳过时间段的处理方案
查看>>
vnpy学习_04回测评价指标的缺陷
查看>>
ubuntu终端一次多条命令方法和区别
查看>>
python之偏函数
查看>>
vnpy学习_06回测结果可视化改进
查看>>
读书笔记_量化交易如何建立自己的算法交易01
查看>>
设计模式03_工厂
查看>>
设计模式04_抽象工厂
查看>>
设计模式05_单例
查看>>
设计模式06_原型
查看>>
设计模式07_建造者
查看>>
设计模式08_适配器
查看>>
设计模式09_代理模式
查看>>
设计模式10_桥接
查看>>
设计模式11_装饰器
查看>>
设计模式12_外观模式
查看>>
设计模式13_享元模式
查看>>