n个节点能产生多少种二叉树

当n=0时,h(0)=1;

当n=1时,h(1)=1;

当n=2时,1个根节点固定,还有n-1=1个节点,可以作为左子树,也可以作为右子树,

即:h(2)=h(0)*h(1)+h(1)*h(0)=2;

当n=3时,1个根节点固定,还有n-1=2个节点,

即:h(3)=h(0)*h(2)+h(1)*h(1)+h(2)*h(0)=5;

当n>=2时,可组成的二叉树数量为 h(n)=h(0)*h(n-1)+h(1)*h(n-2)+...+h(n-1)*h(0)种

符合Catalan数的定义,可直接利用通项公式得出结果。

递归式:

  h(n)=h(n-1)*(4*n-2)/(n+1);

该递推关系的解为:

  h(n)=C(2n,n)/(n+1)=P(2n,n)/(n+1)!=(2n)!/(n!*(n+1)!) (n=1,2,3,...)

相似的问题还有 NOIP2003普及组  出栈序列统计

时间: 2024-11-10 14:14:27

n个节点能产生多少种二叉树的相关文章

遍历n个节点能够形成的所有二叉树

帮师兄做的一个问题,就是求对n个不同节点能够形成所有的二叉树的形式,不考虑旋转对称性和同构. 问题描述:给定n个节点,查看能够有多少种不同的二叉树形成,并输出出来 算法描述:使用最基本的“分治法“(Divide and Conquer)思想,任选一个节点作为根节点,将剩余节点组成的集合进行分割(Partition),一部分放到左子树进行递归,另一部分放到右子树递归.重点为两部分:一部分使用二进制对集合进行分割,其实就是就集合的”幂集“,另一部分是如何存储.另外还可以进行暴力搜索. 测试用例:n=

2013-03-17---二叉树递归,非递归实现(附代码)深度,叶子节点数量,逐行打印二叉树

昨天晚上没有发文章,说来话长啊,昨天不知道是csdn的问题,还是我的问题,我访问了半天,访问不上网站啊,后来12点多了,就睡了.上一篇文章说到了二叉树的先序,中序,后序遍历问题,这次还是说的简单的一点,说计算二叉树的深度,和叶子节点数量 int ceng(Node *pRoot) //计算层数,递归实现 { int left = 0; int right = 0; int res = 0; if (pRoot == NULL) { return 0; } if (pRoot->pLeft !=

一种二叉树前序非递归遍历方法

节点结构: 1 class TreeNode(){ 2 3 public String data; 4 5 public TreeNode leftChild; 6 7 public TreeNode rightChild; 8 9 } 前序遍历的一种方法: 1 public void levelOrder3(TreeNode p){ 2 if(p == null) return ; 3 Stack<TreeNode> stack = new Stack<TreeNode>();

字符设备设备节点创建的两种方法

在Linux下,字符设备和块设备都体现了"一切皆为文件"的思想,对于这两种设备而言,他们在Linux系统中都有一个对应的文件来"代表"它们的存在,那就是设备文件.应用程序通过操作某个设备文件,便可以操作对应的硬件.设备有主设备号和次设备号,例如在Linux下通过ls -l /dev/ttyS0命令可以看到如图信息 对于/dev/ttyS0设备文件,c表示它是一个字符设备文件(如果是'b'则是块设备文件),4是它的主设备号,64是它的次设备号.Linux系统根据设备文

LeetCode96_Unique Binary Search Trees(求1到n这些节点能够组成多少种不同的二叉查找树) Java题解

题目: Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For example, Given n = 3, there are a total of 5 unique BST's. 1 3 3 2 1 \ / / / \ 3 2 1 1 3 2 / / \ 2 1 2 3 解题: 用递归的思想,当仅仅有0个或是1个节点的时候.仅仅有一种.n个节点的时候有f(n)种

(hdu step 2.3.4)How Many Trees?(大数:求n个节点能够成多少棵二叉树)

在写题解之前给自己打一下广告哈~..抱歉了,希望大家多多支持我在CSDN的视频课程,地址如下: http://edu.csdn.net/course/detail/209 题目: How Many Trees? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 976 Accepted Submission(s): 511   Problem

LeetCode96_Unique Binary Search Trees(求1到n这些节点可以组成多少种不同的二叉查找树) Java题解

题目: Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For example, Given n = 3, there are a total of 5 unique BST's. 1 3 3 2 1 \ / / / \ 3 2 1 1 3 2 / / \ 2 1 2 3 解题: 用递归的思想,当只有0个或是1个节点的时候,只有一种:n个节点的时候有f(n)种:

二叉树的层序遍历、二叉树叶节点输出算法、求二叉树的高度、层序创建一棵二叉树

二叉树的层序遍历 1 void LevelorderTraversal(BinTree BT) 2 { 3 std::queue<BinTree> Queue; 4 BinTree T; 5 if (!BT) 6 return; //若是空树则直接返回 7 Queue.push(BT); 8 while (!Queue.empty()) 9 { 10 T = Queue.front(); 11 Queue.pop(); 12 printf("%c ", T->Data

637. Average of Levels in Binary Tree(一棵树每层节点的平均数)(二叉树的层序遍历)

Given a non-empty binary tree, return the average value of the nodes on each level in the form of an array. Example 1: Input: 3 / 9 20 / 15 7 Output: [3, 14.5, 11] Explanation: The average value of nodes on level 0 is 3, on level 1 is 14.5, and on le