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

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

导语🌷🌷:

       "只有经历过地狱般的折磨 才有征服天堂的力量  

只有流过血的手 才能弹出世间的绝唱"

af66d766bcea4deda5cba1444a373a55.png

基础知识:

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: 创建二叉树

3426e9ba0e784964b84bc955a145d77e.png

要创建以上的二叉树 我们需要定义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)


中序遍历

1. def in_order(root):#先打印左子树再根节点再右子树
2. if root.left:in_order(root.left)
3. print(root)
4. 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的递归写法)

相关文章
|
4月前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
本文介绍了两种Python实现方法,用于按照之字形顺序打印二叉树的层次遍历结果,实现了在奇数层正序、偶数层反序打印节点的功能。
61 6
|
4月前
|
Python
【Leetcode刷题Python】114. 二叉树展开为链表
LeetCode上114号问题"二叉树展开为链表"的Python实现,通过先序遍历二叉树并调整节点的左右指针,将二叉树转换为先序遍历顺序的单链表。
30 3
【Leetcode刷题Python】114. 二叉树展开为链表
|
4月前
|
索引 Python
【Leetcode刷题Python】从列表list中创建一颗二叉树
本文介绍了如何使用Python递归函数从列表中创建二叉树,其中每个节点的左右子节点索引分别是当前节点索引的2倍加1和2倍加2。
69 7
|
4月前
|
存储 算法 Python
【Leetcode刷题Python】297. 二叉树的序列化与反序列化
LeetCode第297题"二叉树的序列化与反序列化"的Python语言解决方案,包括序列化二叉树为字符串和反序列化字符串为二叉树的算法实现。
28 5
|
4月前
|
Python
【Leetcode刷题Python】236. 二叉树的最近公共祖先
LeetCode上236号问题"二叉树的最近公共祖先"的Python实现,使用递归方法找到两个指定节点的最近公共祖先。
41 5
|
4月前
|
Python
【Leetcode刷题Python】199. 二叉树的右视图
LeetCode上199号问题"二叉树的右视图"的Python实现,通过深度优先搜索算法按层序从右向左访问节点,以获取每层的最右边节点的值。
31 4
|
4月前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - II. 从上到下打印二叉树 II
本文提供了一种Python实现方法,用于层次遍历二叉树并按层打印结果,每层节点按从左到右的顺序排列,每层打印到一行。
40 3
|
4月前
|
Python
【Leetcode刷题Python】105. 从前序与中序遍历序列构造二叉树
LeetCode上105号问题"从前序与中序遍历序列构造二叉树"的Python实现,通过递归方法根据前序和中序遍历序列重建二叉树。
30 3
|
4月前
|
存储 Python
【Leetcode刷题Python】103. 二叉树的锯齿形层序遍历
LeetCode上103号问题"二叉树的锯齿形层序遍历"的Python实现,使用了双端队列来实现层与层之间交替的遍历顺序。
23 3
|
4月前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - I. 从上到下打印二叉树
本文介绍了使用Python实现从上到下打印二叉树的解决方案,采用层次遍历的方法,利用队列进行节点的访问。
36 2