基础知识:
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的递归写法)