您的位置:首页 > 文旅 > 旅游 > web培训设计_网址你懂我意思正能量不用下载_青岛seo服务公司_seo搜索优化费用

web培训设计_网址你懂我意思正能量不用下载_青岛seo服务公司_seo搜索优化费用

2024/12/23 11:33:28 来源:https://blog.csdn.net/Loyalty_lu/article/details/143298587  浏览:    关键词:web培训设计_网址你懂我意思正能量不用下载_青岛seo服务公司_seo搜索优化费用
web培训设计_网址你懂我意思正能量不用下载_青岛seo服务公司_seo搜索优化费用

 考研要求

        考二叉排序树的建树、查找、中序遍历代码题,删除在选择题出过,大题可能会考

二叉排序树(二叉搜索树)(二叉查找树)的含义

        就是左子树的任意节点   小于根节点   小于右子树的任意节点

二叉排序树的建树

版本1:递归版本

建树的大概流程就是进行比较数据,若比根节点小,就去左子树

                                                          若比根节点大,就去右子树

动图示意

 

核心代码

//核心函数:构造二叉排序树,此版本为递归版本
int bst_insert(BTree& root, int val)
{//每次新来一个先建一个新节点BTree newTree = (BTree)calloc(1, sizeof(Tnode));newTree->val = val;if (root == NULL){root = newTree;return 1;//插入成功}if (val > root->val){return bst_insert(root->rc, val);}else if(val < root->val){return bst_insert(root->lc, val);}else{return 0;//考研不考相等元素的插入}
}

【注】理解递归的宏观思路,就是你相信他能帮你完成你想要的事情以及注意结束条件即可

 二叉排序树的中序遍历

和之前二叉树专题的一样,就不再过多赘述了

二叉树专题

//中序遍历
void mid_print(BTree t)
{if (t){mid_print(t->lc);printf("%d ", t->val);mid_print(t->rc);}
}

二叉排序树的查找

查找和建树的思想差不多,若比根节点小,就去左子树

                                           若比根节点大,就去右子树

//查找不修改,可以不加引用,既使加引用,下方用了临时指针指向,改变临时指针也不会改变tree
void find_tree(BTree tree,ElemType key)
{BTree cur = tree;//临时指针while (cur){if (key > cur->val){//右子树cur = cur->rc;}else if (key < cur->val){cur = cur->lc;}else{printf("在二叉排序树中找到了%d\n",key);break;}}
}

可运行代码全部

 

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
//树结构体
typedef struct tree_node {ElemType val;struct tree_node* lc;struct tree_node* rc;
}Tnode, * BTree;
//注意:考研是会考二叉排序树的建树函数的
//二叉排序树也称为二叉搜索树(二叉查找树)
//特点,左子树都小于根节点,小于右子树
//考中序遍历,查找//核心函数:构造二叉排序树,此版本为递归版本
int bst_insert(BTree& root, int val)
{//每次新来一个先建一个新节点BTree newTree = (BTree)calloc(1, sizeof(Tnode));newTree->val = val;if (root == NULL){root = newTree;return 1;//插入成功}if (val > root->val){return bst_insert(root->rc, val);}else if(val < root->val){return bst_insert(root->lc, val);}else{return 0;//考研不考相等元素的插入}
}void create_bst_tree(BTree &root,int *nums,int len)
{for (int i = 0; i < len; ++i){bst_insert(root, nums[i]);//核心函数}
}
//中序遍历
void mid_print(BTree t)
{if (t){mid_print(t->lc);printf("%d ", t->val);mid_print(t->rc);}
}//查找
void find_tree(BTree tree,ElemType key)
{BTree cur = tree;while (cur){if (key > cur->val){//右子树cur = cur->rc;}else if (key < cur->val){cur = cur->lc;}else{printf("在二叉排序树中找到了%d\n",key);break;}}
}int main()
{BTree trees = NULL;int nums[] = { 15,25,65,2,89 };int len = (int)sizeof(nums) / sizeof(nums[0]);create_bst_tree(trees, nums,len);mid_print(trees);puts("");find_tree(trees, 65);return 0;
}

代码运行图

代码删除在下节,比较复杂

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com