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

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.xdnf.cn/news/15932.html

相关文章:

  • AG32:解锁MCU+FPGA应用新姿势,功能与实战全解析
  • SQL中的EXPLAIN命令详解
  • 【Linux】权限详解 权限本质、权限属性、su、sudo提权、chmod\chown\chgrp、文件类别
  • Qt 应用程序入口代码分析
  • HarmonyOS 启动提速秘籍:懒加载全链路实战解析
  • mysql第三次作业
  • 什么是的优先级反转(Priority Inversion) 和 优先级继承(Priority Inheritance)?
  • Syncthing实时共享同步数据 服务器数据备份软件(linux、windows)
  • 《程序员修炼之道》第一二章读书笔记
  • 【ChatOpenAI】常用方法详解
  • Helm常用命令大全(2025最新版)
  • 二分查找-69.x的平方根-力扣(LeetCode)
  • 大语言模型置信度增强实战指南
  • (LeetCode 每日一题) 1233. 删除子文件夹 (排序)
  • 统计学习方法
  • 堆堆堆,咕咕咕
  • python的多线程无法并行只能并发,why?
  • GA-BP遗传算法优化BP神经网络数据生成,采用SVM分类模型评估
  • roslaunch 文件的核心语法和使用技巧
  • Linux内核设计与实现 - 第5章 系统调用
  • docker构建springboot镜像
  • 数据结构之图
  • 【办公类-107-02】20250719视频MP4转gif(削减MB)
  • MyBatis分页神器PageHelper深度解析
  • 深入解析文件操作(上)- 二进制文件和文本文件,流的概念,文件的打开和关闭
  • 计算机网络1.1:计算机网络在信息时代的作用
  • Redis常见线上问题
  • Javascript进程和线程通信
  • VIT速览
  • Nestjs框架: RxJS 核心方法实践与错误处理详解