一.卡特兰数(出栈序列的种数)
import math
n=int(input())
def c(n,m):#计算组合数
return math.factorial(n)/(math.factorial(n-m)*math.factorial(m))
num=c(2*n,n)-c(2*n,n-1)#总序列数减去非法序列数
print(int(num))
二.二叉树
N = 100005
t = [0] * N # tree[0]不用,0表示空结点
class Node:
def __init__(self, v, ls, rs):
self.v = v
self.ls = ls
self.rs = rs
def preorder(p): # 求先序序列
if p != 0:
print(t[p].v, end=' ') # 先序输出
preorder(t[p].ls)
preorder(t[p].rs)
def midorder(p): # 求中序序列
if p != 0:
midorder(t[p].ls)
print(t[p].v, end=' ') # 中序输出
midorder(t[p].rs)
def postorder(p): # 求后序序列
if p != 0:
postorder(t[p].ls)
postorder(t[p].rs)
print(t[p].v, end=' ') # 后序输出
n = int(input())
for i in range(1, n+1):
a, b = map(int, input().split())
t[i] = Node(i, a, b)
preorder(1); print()
midorder(1); print()
postorder(1); print()
#构建FBI树,要求输入字符串前一半作为左子树,右一半作为右子树
class node:
def __init__(self,s,lc=None,rc=None):#左右子树要初始化为空
self.lc=lc
self.rc=rc
if ('0' in s) and ('1' in s):
self.v='F'
elif '0'in s:
self.v='B'
else:
self.v='I'
def postorder(p):#后序遍历
if p!=None:
postorder(p.lc)
postorder(p.rc)
print(p.v,end='')
else:
return##########后序遍历要记得中止
def buildtree(s):
if len(s)==1:
return node(s)
else:
root=node(s,buildtree(s[:len(s)//2]),buildtree(s[len(s)//2:]))#递归建造树
return root
N=int(input())
str_=input()
tree=buildtree(str_)
postorder(tree)