算法学习011-不同的二叉查找树/搜索树 c++动态规划算法实现 中小学算法思维学习 信奥算法解析

目录

C++不同的二叉查找树

一、题目要求

1、编程实现

2、输入输出

二、算法分析

三、程序编写

四、运行结果

五、考点分析

六、推荐资料


C++不同的二叉查找树

一、题目要求

1、编程实现

二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。

现给定一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的二叉搜索树有多少种?返回满足题意的二叉搜索树的种数。

注:节点个数数n在1到19之间

2、输入输出

输入描述:输入一个正整数n(1<=n<=40)

输出描述:只有一行,一个整数,即多少种不同的二叉搜索树

输入样例:

3

输出样例:

5

二、算法分析

  1. 从给定题目的初步分析可以看出,这是算法中比较典型的不同二叉搜索树
  2. 根据二叉搜索的定义可以得出,左子树一定比节点小,右子树比节点大
  3. 接下来具体分析:
  4. 当节点为0的时候,也就是节点为空,这个是空二叉树也是一棵二叉树
  5. 当节点为1的时候,就是只有一个节点1,为一棵二叉树
  6. 当节点为2的时候,根据定义可以有:节点为1右子树为2的二叉树和节点为2左子树为1的二叉树,共2棵二叉树
  7. 当节点为3的时候,根据上图可以看到由:节点为1的两棵和节点为2的一棵和节点为3的两棵相加而来,共有5棵
  8. 而通过观察节点为3的二叉树,当节点为1的时候,发现左子树是为0(一棵),右子树为2和3(两棵)即:1*2=2
  9. 再次分析节点为3的二叉树,当节点为2的时候,左右子树都是为1(一棵),即:1*1=1
  10. 继续分析节点为3的二叉树,当节点为3的时候,发现左子树是为1和2(两棵),右子树为0(一棵)即:2*1=2
  11. 所以可以采用动态规划的方式来进行实现
  12. 设置动态数组dp[i],i表示爬上第几个节点;所以对应的dp[i]就是爬上第i个节点对应的不同的二叉搜索树
  13. 而要求第i个节点对应的不同二叉搜索树需要从1遍历到第i个节点,将每个节点对应的左子树对应的不同二叉树乘以右子树对应的不同二叉树然后累加的来
  14. 所以可以得出对应的动态数组dp[i]的状态转移方为:dp[i]+=dp[j-1]*dp[i-j]
  15. 同时遍历顺序为从小到大,外层从0到n,内层从1到i
  16. 而根据题目分析可以得到dp[0]=dp[1]=1

三、程序编写

//程序中的dp可以使用动态数组vector进行实现更好
#include<bits/stdc++.h>
using namespace std;
int dp[20];
int getTrees(int n)
{dp[0] = dp[1] = 1;for(int i=2;i<=n;i++)for(int j=1;j<=i;j++)//第i个节点对应的不同二叉搜索由对应不同左子树乘以不同右子树而来dp[i] += dp[j-1] * dp[i-j];return dp[n];
}
int main()
{int n;cin >> n;cout << getTrees(n);return 0;
}

 本文作者:小兔子编程 作者首页:小兔子编程-CSDN博客

四、运行结果

3
55
42

五、考点分析

难度级别:中等,这题相对而言有一定难度,具体主要考查如下:

  1. 分析题目,找到解题思路
  2. 了解什么是二叉搜索树,二叉搜索树的定义
  3. 充分掌握变量和数组的定义和使用
  4. 学会动态规划算法的原理和使用
  5. 确定动态数组的定义和含义
  6. 分析出动态规划算法的状态转移方程以及遍历顺序
  7. 学会输入流对象cin的使用,从键盘读入相应的数据
  8. 学会for循环的使用,在确定循环次数的时候推荐使用学会
  9. 掌握输出流对象cout的使用,与流插入运算符 << 结合使用将对象输出到终端显示
  10. 学会分析题目,算法分析,将复杂问题模块化,简单化,从中找到相应的解题思路
  11. 充分掌握变量定义和使用、分支语句、循环语句和动态规划算法的应用

PS:方式方法有多种,小朋友们只要能够达到题目要求即可!

六、推荐资料

  • 所有考级比赛学习相关资料合集【推荐收藏】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/687273.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STC8增强型单片机开发【定时器Timer⭐】

目录 一、引言 二、定时器基础知识 三、STC8定时器配置 四、代码示例 五、总结 一、引言 在单片机开发中&#xff0c;定时器&#xff08;Timer&#xff09;是一个极其重要的组件&#xff0c;它允许开发者基于时间触发各种事件或任务。STC8增强型单片机作为一款功能丰富的…

uni-app(三):离线打包与插件引用(Android)

离线打包与插件引用 1.下载Android离线SDK2.使用Android Studio打开离线打包项目并更新Gradle3.解决报错4.构建5.配置AppKeya.查看证书b.申请AppKeyc.配置AppKey 6.生成本地打包App资源7.拷贝App资源到Android项目中8.修改 appid9.修改Android项目配置文件10.下载证书并配置11.…

Sqli-labs第五~八关(布尔盲注)

目录 首先找到他们的闭合方式 操作 总结&#xff1a; 第五关根据页面结果得知是字符型但是和前面四关还是不一样是因为页面虽然有东西。但是只有对于请求对错出现不一样页面其余的就没有了。这个时候我们用联合注入就没有用&#xff0c;因为联合注入是需要页面有回显位。如果…

day07beef-xss之根据beef-xss获取cookies

1.安装 apt-get update apt-get install beef-xss 若报错运行不了尝试 apt remove ruby apt remove beef-xss apt-get install ruby apt-get install ruby-dev libpcap-dev gem install eventmachine apt-get install beef-xss 2.运行 beef-xss 运行成功会自动弹出浏览框。 攻…

Web实时通信的学习之旅:轮询、WebSocket、SSE的区别以及优缺点

文章目录 一、通信机制1、轮询1.1、短轮询1.2、长轮询 2、Websocket3、Server-Sent Events 二、区别1、连接方式2、协议3、兼容性4、安全性5、优缺点5.1、WebSocket 的优点&#xff1a;5.2、WebSocket 的缺点&#xff1a;5.3、SSE 的优点&#xff1a;5.4、SSE 的缺点&#xff1…

AI大模型探索之路-训练篇20:大语言模型预训练-常见微调技术对比

系列篇章&#x1f4a5; AI大模型探索之路-训练篇1&#xff1a;大语言模型微调基础认知 AI大模型探索之路-训练篇2&#xff1a;大语言模型预训练基础认知 AI大模型探索之路-训练篇3&#xff1a;大语言模型全景解读 AI大模型探索之路-训练篇4&#xff1a;大语言模型训练数据集概…

机器视觉任务中语义分割方法的进化历史

机器视觉任务中语义分割方法的进化历史 一、基于传统方法的图像分割二、基于卷积神经网络的图像分割三、基于Attention机制的图像分割四、语义分割模型的挑战与改进 在图像处理领域&#xff0c;传统图像分割技术扮演着重要角色。 一、基于传统方法的图像分割 这些方法包括大津…

Navicat 17 的数据分析

上周的博客预告了 Navicat 17&#xff08;英文版&#xff09;即将发布&#xff0c;目前正在测试阶段&#xff0c;并计划于 5 月 13 日发布。如我们所见&#xff0c;版本 17 推出了众多令人兴奋的新功能。其中最大亮点是数据分析工具&#xff0c;只需点击按钮&#xff0c;即可为…

线程同步--互斥锁,读写锁

线程同步 基本概念 线程的能力在于能够方便地通过全局变量或共享内存来交换信息&#xff0c;但这也带来了并发控制的复杂性&#xff0c;主要表现在如何安全地管理多个线程对共享资源的访问。这里涉及到几个关键的概念和技术&#xff1a; 临界区&#xff08;Critical Section…

【机器学习】线性回归:以房价预测为例

线性回归&#xff1a;揭秘房价预测的黑科技 一、引言二、线性回归概述三、房价预测实例数据收集与预处理特征选择与建模模型评估与优化 四、总结与展望 一、引言 在数字化时代&#xff0c;数据科学已成为推动社会进步的重要引擎。其中&#xff0c;线性回归作为数据科学中的基础…

如何打开远程桌面连接?

远程桌面连接是一项强大的功能&#xff0c;它允许我们远程访问其他计算机&#xff0c;并在远程计算机上进行操作。这对于远程办公、技术支持和远程培训等场景非常有用。本文将介绍如何在不同操作系统中打开远程桌面连接。 Windows系统 在Windows操作系统中&#xff0c;打开远程…