当前位置: 首页 > 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.lryc.cn/news/594536.html

相关文章:

  • 【web安全】SQL注入与认证绕过
  • 【算法300题】:双指针
  • c#转python第四天:生态系统与常用库
  • XSS的介绍
  • Linux主机 ->多机器登录
  • 从零到精通:用DataBinding解锁MVVM的开发魔法
  • 【JS逆向基础】数据库之MongoDB
  • Django接口自动化平台实现(四)
  • SpringBoot的配置文件
  • 测试学习之——Pytest Day4
  • WPF学习笔记(28)Interaction.Triggers的意义与使用方式
  • 人工智能之数学基础:随机实验、样本空间、随机事件
  • 均值漂移累积监测算法(MDAM):原理、命名、用途及实现
  • 爬虫实战案例(两个)
  • 【Lua】大G表
  • Linux 基本指令详解
  • 【论文研读】SlowFast Networks for Video Recognition
  • 大语言模型调用方式与函数调用
  • 从磁记录到数据中心:磁盘原理与服务器架构的完整技术链路
  • CVE-2022-41128
  • 六边形滚动机器人cad【7张】三维图+设计书明说
  • 从零搭建智能搜索代理:LangGraph + 实时搜索 + PDF导出完整项目实战
  • 【超越VGGT】π3-利用置换等变方法去除3r系列的归纳偏置
  • TypeScript 中替代 Interface 的方案
  • 一文速通《二次型》
  • UE5多人MOBA+GAS 26、为角色添加每秒回血回蓝(番外:添加到UI上)
  • 图的表示法以及实现
  • zabbix服务器告警处理
  • 【windows 终端美化】Windows terminal + oh-my-posh 来美化命令行终端
  • C++ 桶排序、基数排序、堆排序