二叉树三大基础知识 Python专题

简介: 二叉树三大基础知识 Python专题

基础知识:


1:N个节点能够组成多少种不同二叉树


def count(n):
    s=count_searched.get(n,0)
    if not s:
        for k in range(0,n):
            s+=count(k)*count(n-1-k)
        count_searched[n]=s
    return s
count_searched={0:1}

递归思想+字典优化 其背后是卡特兰数列

传送门>> 视频对这个讲的很透彻 10分钟帮你解决这个问题👨‍💻👨‍💻<<传送门



2: 创建二叉树

要创建以上的二叉树 我们需要定义TreeNode()这样一个类
class Treenode:
    def __init__(self,data,left=None,right=None):
        self.data=data
        self.left=left
        self.right=right
    def __str__(self):
        return str(self.data)
A,B,C,D,E,F,G,H,I=[Treenode(x) for x in 'ABCDEFGHI']#列表拆包
A.left,A.right=B,C
B.right=D
C.left,C.right=E,F
E.left=G
F.left,F.rihgt=H,I
print(A.left,B.right,F.left)#检验


三:遍历二叉树


前序遍历

def pre_order(root):#前序遍历 先根节点然后左子树然后右子树
    print(root)
    if root.left:pre_order(root.left)
    if root.right:pre_order(root.right)


中序遍历

def in_order(root):#先打印左子树再根节点再右子树
    if root.left:in_order(root.left)
    print(root)
    if root.right:in_order(root.right)


后序遍历

def post_order(root):
    if root.left:post_order(root.left)
    if root.right:post_order(root.right)
    print(root)#先打印左子树再打印右子树再打印根节点


其实会发现就是三行代码的排列顺序改变了以下~很简单吧👏👏 (深度优先遍历DFS的递归写法)


目录
相关文章
|
5天前
|
存储 算法 Python
文件管理系统中基于 Python 语言的二叉树查找算法探秘
在数字化时代,文件管理系统至关重要。本文探讨了二叉树查找算法在文件管理中的应用,并通过Python代码展示了其实现过程。二叉树是一种非线性数据结构,每个节点最多有两个子节点。通过文件名的字典序构建和查找二叉树,能高效地管理和检索文件。相较于顺序查找,二叉树查找每次比较可排除一半子树,极大提升了查找效率,尤其适用于海量文件管理。Python代码示例包括定义节点类、插入和查找函数,展示了如何快速定位目标文件。二叉树查找算法为文件管理系统的优化提供了有效途径。
36 5
|
4月前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
本文介绍了两种Python实现方法,用于按照之字形顺序打印二叉树的层次遍历结果,实现了在奇数层正序、偶数层反序打印节点的功能。
64 6
|
4月前
|
Python
【Leetcode刷题Python】114. 二叉树展开为链表
LeetCode上114号问题"二叉树展开为链表"的Python实现,通过先序遍历二叉树并调整节点的左右指针,将二叉树转换为先序遍历顺序的单链表。
31 3
【Leetcode刷题Python】114. 二叉树展开为链表
|
4月前
|
索引 Python
【Leetcode刷题Python】从列表list中创建一颗二叉树
本文介绍了如何使用Python递归函数从列表中创建二叉树,其中每个节点的左右子节点索引分别是当前节点索引的2倍加1和2倍加2。
76 7
|
4月前
|
存储 算法 Python
【Leetcode刷题Python】297. 二叉树的序列化与反序列化
LeetCode第297题"二叉树的序列化与反序列化"的Python语言解决方案,包括序列化二叉树为字符串和反序列化字符串为二叉树的算法实现。
29 5
|
4月前
|
Python
【Leetcode刷题Python】236. 二叉树的最近公共祖先
LeetCode上236号问题"二叉树的最近公共祖先"的Python实现,使用递归方法找到两个指定节点的最近公共祖先。
44 5
|
4月前
|
Python
【Leetcode刷题Python】199. 二叉树的右视图
LeetCode上199号问题"二叉树的右视图"的Python实现,通过深度优先搜索算法按层序从右向左访问节点,以获取每层的最右边节点的值。
31 4
|
4月前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - II. 从上到下打印二叉树 II
本文提供了一种Python实现方法,用于层次遍历二叉树并按层打印结果,每层节点按从左到右的顺序排列,每层打印到一行。
42 3
|
4月前
|
Python
【Leetcode刷题Python】105. 从前序与中序遍历序列构造二叉树
LeetCode上105号问题"从前序与中序遍历序列构造二叉树"的Python实现,通过递归方法根据前序和中序遍历序列重建二叉树。
33 3
|
4月前
|
存储 Python
【Leetcode刷题Python】103. 二叉树的锯齿形层序遍历
LeetCode上103号问题"二叉树的锯齿形层序遍历"的Python实现,使用了双端队列来实现层与层之间交替的遍历顺序。
23 3