/*
* poj 1095 二叉树编号
题目大意:
二叉树按照如下规则进行编号:
1、0个节点的空树编号为0
2、单个节点的树编号为1
3、任意包含m个节点的二叉树,其编号必然小于任意一个包含m+1个节点的二叉树
4、包含相同节点的二叉树,左子树如果相同,大小取决于右子树的大小比较,如果
左子树不同,则大的编号较大。公式如下:
|-- n(L(T1)) > n(L(T2))
n(T1) > n(T2) --|
|-- n(L(T1))= n(L(T2)) && n(R(T1)) > n(R(T2))
求给定序号的二叉树打印.
数学模型:
令f(m)表示包含m个节点的二叉树的个数,则有如下公式成立:
f(m) = sum{f(k)*f(m-1-k) | k->0~m-1}
解题思路:
本题与poj 1019数列问题有点象,同样是打印出序号为n的元素。解法也类似
1、根据上面求出的f(m)数组,可以判断出给定的序号为n的二叉树包含的节点个数
2、然后枚举右子树的元素个数(从m-1到0),找出左右子树的元素个数
3、
*/
#include <stdio.h>
#define M_MAX 18
unsigned int f[M_MAX+1];
/*
打印包含m个节点的,
poj 1095 二叉树的编号
最新推荐文章于 2022-05-11 09:59:35 发布