重建二叉树

本文介绍了Python中树这种非线性数据结构,以操作系统目录为例,阐述树结构特点。着重讲解二叉树,包括其节点特征、有序性及三种遍历方式。还给出根据前序和中序遍历结果重建二叉树的题目及Python代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

'''
python中的树,树是非线性的数据结构(因为每个节点不止有一个后继)
计算机操作系统中的目录就是典型的树。(根节点认为是根目录,子节点是当前根目录下的所有子目录)

树结构的特点:
每个节点有且仅有一个父节点(除了根节点没有父节点之外),除了根节点之外,父节点具有唯一性
对于二叉树而言,每个节点会包含两个子节点(除了叶子节点没有子节点之外)
普通的树中的节点可以包含多于两个的孩子节点

二叉树是有序的树,每个节点必须区分左孩子和右孩子

二叉树的三种遍历方式,每种遍历方式都会访问到树中的每个节点
(1)先序遍历:根节点,左子树,右子树
(2)中序遍历:左子树,根节点,右子树
(3)后序遍历:左子树,右子树,根节点

假设有一棵二叉树:
         a
        /\
       b  c
      /\  /
     d e  f
前序遍历:a b d e c f
中序遍历:d b e a f c
后序遍历:d e b f c a
'''

'''
题目描述
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。

前序遍历的第一个数值必然是根节点,而中序遍历中对应值所在的位置则将中序遍历的结果划分为左右子树两个部分
'''
# -*- coding:utf-8 -*-
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:
    # 返回构造的TreeNode根节点
    def reConstructBinaryTree(self, pre, tin):
        # write code here
        if not pre or not tin:
            return None
        val=pre.pop(0)
        root=TreeNode(val)
        index=tin.index(val)
        root.left=self.reConstructBinaryTree(pre,tin[:index])
        root.right=self.reConstructBinaryTree(pre,tin[(index+1):])

        return root
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值