(Python)列表转换为二叉树

class Node:
    def __init__(self, val=None):
        self.val = val
        self.left = None
        self.right = None


def levelorder(root):  # 层级遍历
    if not root:
        return
    res=[]
    seq=[root]
    while seq:
        node=seq.pop(0)
        res.append(node.val)
        if node.left:
            seq.append(node.left)
        if node.right:
            seq.append(node.right)
    return res


def preorder(root):  # 前序遍历
    res = []
    def do_preorder(node):
        if not node:
            return
        res.append(node.val)
        do_preorder(node.left)
        do_preorder(node.right)
    do_preorder(root)
    return res


def inorder(root):  # 中序遍历
    res = []
    def do_inorder(node):
        if not node:
            return
        do_inorder(node.left)
        res.append(node.val)
        do_inorder(node.right)
    do_inorder(root)
    return res


def postorder(root):  # 后序遍历
    res = []
    def do_postorder(node):
        if not node:
            return
        do_postorder(node.left)
        do_postorder(node.right)
        res.append(node.val)
    do_postorder(root)
    return res


def list_to_binarytree(nums):  # 列表转二叉树
    if not nums:
        return
    root = Node(nums[0])
    seq = [root]
    i = 1
    while i < len(nums):
        node = seq.pop(0)
        node.left = Node(nums[i])
        if nums[i]:
            seq.append(node.left)
        node.right = Node(nums[i + 1])
        i += 1
        if i < len(nums):
            node.right = Node(nums[i])
            if nums[i]:
                seq.append(node.right)
        i += 1
    return root

def list_to_binarytree(nums):  # 递归实现 列表转二叉树
    def level(index):
        if index >= len(nums):
            return None
        root = Node(nums[index])
        root.left = level(2*index+1)
        root.right = level(2*index+2)
        return root
    return level(0)



datas = input().split()
print(levelorder(list_to_binarytree(datas)))
print(preorder(list_to_binarytree(datas)))
print(inorder(list_to_binarytree(datas)))
print(postorder(list_to_binarytree(datas)))

输入:

1 2 3 4 5 6 7

输出:

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值