python学习积累八

一.卡特兰数(出栈序列的种数)

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)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值