当前位置: 首页 > news >正文

BST(二叉搜索树)的笔试大题(C语言)

目录

  • 前言
  • 一、代码实现二叉搜索树
  • 二、求节点个数
    • 代码实现
  • 三、求叶子节点个数
    • 代码实现
  • 四、求深度
    • 代码实现
  • 结语

前言

二叉搜索树在笔试的题目里大多数是客观题,但是也有概率出现在主观题中,所以我们也要学会基本的实现,插入节点,前中后序遍历节点,还有节点个数,叶子节点个数,二叉树深度,这些算法基本都是用到递归的思想,所以我们要掌握。你如果对二叉搜索树不是很了解可以看这个这两期博文概念和算法题。

在这里插入图片描述

一、代码实现二叉搜索树

#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>typedef int DataType_t;typedef struct BSTNode_t {DataType_t data;struct BSTNode_t* lchild;struct BSTNode_t* rchild;
}BSTNode_t;BSTNode_t* CreateTreeNode(DataType_t val) {BSTNode_t* root = (BSTNode_t*)calloc(1, sizeof(BSTNode_t));root->data = val;root->lchild = NULL;root->rchild = NULL;return root;
}//循环实现插入
bool InsertNode(BSTNode_t* root, DataType_t val) {BSTNode_t* NewNode = CreateTreeNode(val);if (!root) {root = NewNode;return true;}BSTNode_t* curr = root;while (curr) {if (curr->data == val) {printf("Insert failed!\n");return false;}else {if (val < curr->data) {if (!curr->lchild) {curr->lchild = NewNode;break;}curr = curr->lchild;}else {if (!curr->rchild) {curr->rchild = NewNode;break;}curr = curr->rchild;}}}return true;
}//递归实现插入
BSTNode_t* Insert(BSTNode_t* root, DataType_t val) {if (!root) {return CreateTreeNode(val);}if (val < root->data) {root->lchild = Insert(root->lchild, val);}else if (val > root->data) {root->rchild = Insert(root->rchild, val);}return root;
}void PreOrder(BSTNode_t* root) {if (!root) {return;}printf("%d ", root->data);PreOrder(root->lchild);PreOrder(root->rchild);
}void InOrder(BSTNode_t* root) {if (!root) return;InOrder(root->lchild);printf("%d ", root->data);InOrder(root->rchild);
}void PostOrder(BSTNode_t* root) {if (!root) return;PostOrder(root->lchild);PostOrder(root->rchild);printf("%d ", root->data);
}//节点个数
int TreeCount(BSTNode_t* root) {if (!root)return 0;return TreeCount(root->lchild) + TreeCount(root->rchild) + 1;
}//叶子节点个数
int LeafCount(BSTNode_t* root) {if (!root)return 0;if (!root->lchild && !root->rchild) return 1;return LeafCount(root->lchild) + LeafCount(root->rchild);
}int MaxDepth(BSTNode_t* root) {if (!root)return 0;int n1 = MaxDepth(root->lchild);int n2 = MaxDepth(root->rchild);return ((n1 > n2) ? n1 : n2) + 1;
}void Destroyed(BSTNode_t* root) {if (!root) {return;}Destroyed(root->lchild);Destroyed(root->rchild);free(root);return;
}int main() {BSTNode_t* root = CreateTreeNode(10);InsertNode(root, 13);InsertNode(root, 9);InsertNode(root, 25);InsertNode(root, 7);InsertNode(root, 2);InsertNode(root, 17);InsertNode(root, 54);PreOrder(root);printf("\n节点个数:\n");printf("%d\n", TreeCount(root));printf("\n叶子节点个数:\n");printf("%d\n", LeafCount(root));printf("\n二叉树深度:\n");printf("%d\n", MaxDepth(root));Destroyed(root);return 0;
}

二、求节点个数

在这里插入图片描述

代码实现

int TreeCount(BSTNode_t* root) {if (!root)return 0;return TreeCount(root->lchild) + TreeCount(root->rchild) + 1;
}

三、求叶子节点个数

在这里插入图片描述

代码实现

int LeafCount(BSTNode_t* root) {if (!root)return 0;if (!root->lchild && !root->rchild) return 1;return LeafCount(root->lchild) + LeafCount(root->rchild);
}

四、求深度

在这里插入图片描述

代码实现

int MaxDepth(BSTNode_t* root) {if (!root)return 0;int n1 = MaxDepth(root->lchild);int n2 = MaxDepth(root->rchild);return ((n1 > n2) ? n1 : n2) + 1;
}

结语

大家千万不要自以为是,不要小瞧了这些题目,你不要以为自己都懂了,你能手搓出来那才是真的懂,在笔试的题目里绝大多数都是基础题,都是你如果连基础都不掌握你说你能做出很庞大的项目,那绝对是扯淡,所以一定要自己动手多写。同时大家也不要妄自菲薄,你们要相信这些东西别人能做出来你也能,别人能解决的问题,你也能解决,只是时间问题

在这里插入图片描述

希望各位靓仔靓女点赞,收藏,关注多多支持,我们共同进步,后续我会更新更多的面试真题,你们的支持将是我前进最大的动力。

在这里插入图片描述

http://www.dtcms.com/a/288802.html

相关文章:

  • [硬件电路-59]:电源:电子存储的仓库,电能的发生地,电场的动力场所
  • 手推OpenGL相机的正交投影矩阵和透视投影矩阵(附源码)
  • 【AI】文生图文生视频
  • 第三章自定义检视面板_创建自定义编辑器类_编辑器操作的撤销与恢复(本章进度3/9)
  • 使用pnpm安装项目的生产依赖dependencies和开发依赖devDependies及pnpm工作空间等简单使用方法说明
  • Function
  • Qwen3-8B 与 ChatGPT-4o Mini 的 TTFT 性能对比与底层原理详解
  • Docker实战:使用Docker部署envlinks极简个人导航页
  • Springboot美食分享平台
  • 【Kafka】深入理解 Kafka MirrorMaker2 - 实战篇
  • Mac m系列 VMware Fusion虚拟机安装ARM contos
  • host.equiv,.rhosts,inetd.conf文件的作用
  • Python应用进阶DAY10--模块化编程概念(模块、包、导入)及常见系统模块总结和第三方模块管理
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘beautifulsoup4’问题
  • 响应式编程入门教程第九节:UniRx 高级特性与自定义
  • python doipclient库
  • 学习C++、QT---30(QT库中如何自定义控件(自定义按钮)讲解)
  • XSS知识总结
  • Ajax简单介绍及Axios请求方式的别名
  • MyBatis从浅入深
  • SQL中的EXPLAIN命令详解
  • python的pywebview库结合Flask和waitress开发桌面应用程序简介
  • HarmonyOS 网络请求优化实战指南:从0到1写出流畅不卡顿的应用!
  • `tidyverse` 中涉及的函数及其用法
  • [Python] -项目实战8- 构建一个简单的 Todo List Web 应用(Flask)
  • 非线性优化框架CasADi工具箱求解最优控制问题OCP
  • Python Web框架详解:Flask、Streamlit、FastAPI
  • Python知识点2-if语句
  • 学成在线项目
  • 威力导演 12:革新级影音创作平台——专业特效与极致效率的完美融合