首页 > 其他分享 >n个结点组成的二叉树有多少种不同的形态

n个结点组成的二叉树有多少种不同的形态

时间:2024-06-06 22:31:12浏览次数:18  
标签:结点 子树 形态 二叉树 多少 组成

在算法比赛或者408数据结构里面可能会出现问n个结点组成的二叉树有多少种不同的形态,因为二叉树不是平衡二叉树也不是排序二叉树,所以组成的情况包含非常多。下面讲解一下如何推断,主要还是利用动态规划的思想。

我们定义f(n)表明结点为n的二叉树的形态数

  1. 一个结点只有一种情况,记f(1)=1
  2. 两个结点的二叉树,固定一个结点后,剩下左右子树各有一种情况,f(2)=f(1)*f(1)+f(1)*f(1)

如果有三个结点,我们如果固定两个结点是不太好的,因为两个结点的二叉树有好多种,不便于推理。

我们固定根节点,那么剩下两个结点我们可以分配给左右子树,分别有三种情况

  • 左子树两个右子树零个
  • 左右子树分别一个
  • 右子树两个左子树一个

那么f(3) = f(2)*f(0)+f(1)*f(1)+f(0)*f(2)

那么f(0)是多少呢,没有结点也是一种情况,所以f(0)=1

我们不需要结点增加时候每一个树的组成的具体形状是怎么样的,只是知道往左右子树分配多少个结点,每个结点有多少种组合方式,接着遍历递推就可以了。

那么如果有n个结点,我们可以得到:

f(n) = f(n-1) * f(0)+f(n-2) * f(1)+...+f(0) * f(n-1)

而刚好这个数列正好是卡特兰数,上面式子也就是下面的式子

n个结点组成的二叉树有f(n)种形态

四个结点的二叉树有8!/(4! * 5!)=14种形态

标签:结点,子树,形态,二叉树,多少,组成
From: https://blog.csdn.net/newxiaoou/article/details/139483724

相关文章

  • Day15 | 102. 二叉树的层序遍历 、226.翻转二叉树 101. 对称二叉树
    102.二叉树的层序遍历看完本篇可以一口气刷十道题,试一试,层序遍历并不难,大家可以很快刷了十道题。题目链接/文章讲解/视频讲解:https://programmercarl.com/0102.二叉树的层序遍历.html#Definitionforabinarytreenode.#classTreeNode:#def__init__(self,val=0......
  • 【Android面试题】请你分别采用递归和非递归对二叉树进行遍历?
    请你分别采用递归和非递归对二叉树进行遍历?这道题想考察什么?1、二叉树的基本原理和遍历的方法?考察的知识点二叉树遍历的基本概念、二叉树的基本原理考生如何回答二叉树的基本概念当然可以!二叉树是一种常见的数据结构,它由一组称为节点的元素构成。每个节点可以有零个......
  • 二叉树的中序遍历-力扣
    二叉树的中序遍历,指首先遍历左节点,然后遍历中间节点,最后遍历右节点,按照这个顺序进行递归即可。/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*TreeNode*right;*TreeNode():val(0),left(nullp......
  • 二叉树的层序遍历-力扣
    本题是二叉树的层序遍历,通过一个队列来控制遍历的节点,二叉树每层的节点和上一层入队的节点个数是相同的,根据这一点编写循环条件。/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*TreeNode*right;*......
  • Day14 | 二叉树递归遍历
    递归遍历(必须掌握)二叉树的三种递归遍历掌握其规律后,其实很简单题目链接/文章讲解/视频讲解:https://programmercarl.com/二叉树的递归遍历.html注意前中后指的是根节点在前、中、后次序进行遍历。前序遍历#Definitionforabinarytreenode.#classTreeNode:#de......
  • (第26天)【leetcode题解】226、翻转二叉树 589、N叉树的前序遍历 590、N叉树的后序遍
    目录226、翻转二叉树题目描述思路代码589、N叉树的前序遍历题目描述思路代码590、N叉树的后序遍历题目描述思路代码思考总结226、翻转二叉树题目描述给你一棵二叉树的根节点root,翻转这棵二叉树,并返回其根节点。示例:输入:root=[4,2,7,1,3,6,9]输出:[4,7,2,9,......
  • 数据结构复习笔记5.3:线索二叉树
    1.前言        在n个结点的⼆叉链表中,必定有n+1个空链域。⽽遍历运算是最重要的,也是最常⽤的运算⽅法,之前的⽆论是递归与非递归的算法实现遍历效率其实都不算⾼。        现有⼀棵结点数⽬为n的⼆叉树,采⽤⼆叉链表的形式存储。对于每个结点均有指向左右孩⼦......
  • 二叉树遍历 和 线索二叉树
    文章目录1.1二叉树遍历1.1前提问题1:什么叫二叉树的遍历?二叉树的三种遍历:三个概念:遍历和访问和经过重要概念:遍历过程中的经过节点,不代表访问节点问题2:遍历和访问的联系?问题3:这个有顺序的编号的意义是什么?问题4:什么是访问?如何对节点进行访问?1.2二叉树遍历代码:二......
  • 代码随想录算法训练营day14(二叉树)
    代码随想录算法训练营day14(二叉树):学习内容:今天学习二叉树。二叉树节点标准写法(当前节点值,左右子节点,有点像链表节点的定义):structTreeNode{intval;TreeNode*left;TreeNode*right;TreeNode(intx):val(x),left(NULL),right(NULL){}};二......
  • (第25天)【leetcode题解】二叉树的层序遍历
    目录429、N叉树的层序遍历题目描述思路代码515、在每个树行中找最大值题目描述思路代码116、填充每个节点的下一个右侧节点指针题目描述思路代码117、填充每个节点的下一个右侧节点指针II题目描述思路代码104、二叉树的最大深度题目描述思路代码111、二叉树的最小深......