#!/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())
day46列表转为二叉树并且实现前中后遍历二叉树
最新推荐文章于 2023-10-12 00:33:33 发布