day46列表转为二叉树并且实现前中后遍历二叉树

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2020/7/21 23:51
# @Author : caius
# @Site : 
# @File : day46列表转化为二叉树.py
# @Software: PyCharm
# 已知列表nums,将其转化为二叉树。举例:
#
# nums = [3,9,20,None,None,15,7],转化为二叉树后,节点3的左子节点9,右子节点20,9的左右子节点都为None,20的左子节点15,右子节点7,参考附件图片1
#
# 二叉树定义:
from collections import  deque
class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None
#
# 请补全下面函数:
# def list_to_binarytree(nums):
#     pass
#
class Tree(object):
    def __init__(self):
        self.root = None

    def construct_tree(self, values=None):
        if not values:
            return None
        self.root = TreeNode(values[0])
        queue = deque([self.root])
        leng = len(values)
        nums =1
        while nums<leng:
            node = queue.popleft()
            if node:
                node.left = TreeNode(values[nums] if values[nums] else None)
                queue.append(node.left)
                if nums+1<leng:
                    node.right = TreeNode(values[nums+1] if values[nums+1] else None)
                    queue.append(node.right)
                    nums += 1
                nums +=1
    def bfs(self):
        ret = []
        queue = deque([self.root])
        while queue:
            node = queue.popleft()
            if node:
                ret.append(node.val)
                queue.append(node.left)
                queue.append(node.right)
        return ret
    def pre_traversal(self):
        ret = []
        def traversal(head):
            if not head:
                return
            ret.append(head.val)
            traversal(head.left)
            traversal(head.right)
        traversal(self.root)
        return ret
    def in_traversal(self):
        ret = []
        def traversal(head):
            if not head:
                return
            traversal(head.left)
            ret.append(head.val)
            traversal(head.right)

        traversal(self.root)
        return ret
    def post_traversal(self):
        ret = []
        def traversal(head):
            if not head:
                return
            traversal(head.left)
            traversal(head.right)
            ret.append(head.val)


        traversal(self.root)
        return ret


if __name__ == '__main__':
    t= Tree()
    t.construct_tree([1, 2, None, 4, 3, None, 5])
    print(t.bfs())
    print(t.pre_traversal())
    print(t.in_traversal())
    print(t.post_traversal())

参考链接:http://itren.xiaolee.net/p/1359198.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值