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

广州网站设计公司兴田德润在哪儿网络搭建结构图

广州网站设计公司兴田德润在哪儿,网络搭建结构图,wordpress手机页面底部导航,苏宁易购网站建设方案二叉搜索树#xff1a; 树不是线性的#xff0c;是层级结构。基本单位是节点#xff0c;每个节点最多2个子节点。有序。每个节点#xff0c;其左子节点都比它小#xff0c;其右子节点都比它大。每个子树都是一个二叉搜索树。每个节点及其所有子节点形成子树。可以是空树。…二叉搜索树 树不是线性的是层级结构。基本单位是节点每个节点最多2个子节点。有序。每个节点其左子节点都比它小其右子节点都比它大。每个子树都是一个二叉搜索树。每个节点及其所有子节点形成子树。可以是空树。 添加元素从根节点开始比对数值。若比它小往左子树比对若比它大往右子树比对直到找到为空则为新元素的位置。 删除元素 若删除的节点为叶子节点即无子节点则直接删除。若删除的节点只有左子节点则左子节点替代删除节点。若删除的节点只有右子节点则右子节点替代删除节点。若删除的节点既有左子节点又有右子节点则找到直接前驱即删除节点的左子树中的最大值即删除节点的左子节点的最右节点直接前驱的值替代删除节点的值删除直接前驱节点。 遍历元素可使用递归 前序遍历顺序根节点、左子节点、右子节点。中序遍历顺序左子节点、根节点、右子节点。后序遍历顺序左子节点、右子节点、根节点。 查找元素从根节点开始比对数值。若比它小往左子树查找若比它大往右子树查找直到找到该元素则返回1true若没有则返回0false。 C语言实现使用链表实现 创建结构体数据类型记录二叉搜索树的根节点和数据个数 typedef struct Link {LinkNode *root; // 根节点int length; // 统计有多少数据 } LinkBST; // 别名 创建二叉搜索树并初始化 LinkBST bst; bst.root NULL; // 根节点初始化为NULL bst.length 0; // 数据个数初始化为0 创建节点结构体数据类型并创建具体节点实例的函数 // 节点结构体数据类型 typedef struct Node {int value; // 数据类型为整型struct Node *left; // 左子节点struct Node *right; // 右子节点 }LinkNode; // 别名 // 函数创建节点 LinkNode *createNode(int data) {LinkNode *node (LinkNode *)malloc(sizeof(LinkNode)); // 分配节点内存空间if(node NULL){perror(Memory allocation failed);exit(-1);}node-value data; // 数据node-left NULL; // 左子节点初始化为NULLnode-right NULL; // 右子节点初始化为NULLreturn node; } 添加元素 void add(LinkBST *bst, int data) // add element {// 函数往二叉搜索树中添加元素 LinkNode *addNode(LinkNode *node, int data){if(node NULL){LinkNode *newnode createNode(data);node newnode;bst-length; // 每添加一个元素length1return node;}if(data node-value) node-left addNode(node-left, data);else if(data node-value) node-right addNode(node-right, data);return node;}// 从根节点开始比对root指针始终指向二叉搜索树的根节点bst-root addNode(bst-root, data); } 删除元素 void delete(LinkBST *bst, int data) // delete element {// 函数删除节点 LinkNode *del(LinkNode *node){ // 若只有右子节点则右子节点替代删除节点if(node-left NULL){bst-length--; // 每删除一个元素length-1return node-right;}// 若只有左子节点则左子节点替代删除节点else if(node-right NULL){bst-length--; // 每删除一个元素length-1return node-left;}// 左右子节点都有则直接前驱(左子节点的最右节点)替代删除节点并删除直接前驱else if(node-left node-right){LinkNode *tmp node, *cur node-left;while(cur-right){tmp cur;cur cur-right;}node-value cur-value;if(tmp ! node) tmp-right cur-left;else tmp-left cur-left;bst-length--; // 每删除一个元素length-1return node;}}// 函数找到将要删除的节点LinkNode *delNode(LinkNode *node, int data){if(node NULL) return node;if(data node-value) node del(node);else if(data node-value) node-left delNode(node-left, data);else if(data node-value) node-right delNode(node-right, data);return node;} // 从根节点开始比对。root指针始终指向二叉搜索树的根节点bst-root delNode(bst-root, data); } 遍历元素使用递归 // 前序遍历根左右 void pretravel(LinkNode *node) {if(node NULL) return ;printf(%d , node-value);pretravel(node-left);pretravel(node-right); } // 中序遍历左根右 void midtravel(LinkNode *node) {if(node NULL) return ;midtravel(node-left);printf(%d , node-value);midtravel(node-right); } // 后序遍历左右根 void posttravel(LinkNode *node) {if(node NULL) return ;posttravel(node-left);posttravel(node-right);printf(%d , node-value); } 查找元素 找到元素返回1(true)没找到返回0(false)。 int find(LinkNode *node, int data) {if(node NULL) return 0;if(data node-value) return 1;if(data node-value) find(node-left, data);else if(data node-value) find(node-right, data); } 完整代码bst.c #include stdio.h #include stdlib.h #include stdbool.h/* structure */ typedef struct Node // linkedlist node {int value; // value type is integerstruct Node *left; // left child nodestruct Node *right; // right child node }LinkNode;typedef struct Link // binary search tree {LinkNode *root; // root node of the treeint length; // the number of the tree } LinkBST;/* function prototype */ void add(LinkBST *, int); // add element to the tree void delete(LinkBST *, int); // delete element from the tree void pretravel(LinkNode *); // show element one by one,(root,left,right) void midtravel(LinkNode *); // show element one by one,(left,root,right) void posttravel(LinkNode *); // show element one by one,(left,right,root) int find(LinkNode *, int); // if find data,return 1(true),or return 0(false)/* main function */ int main(void) {// create binary search tree and initializationLinkBST bst;bst.root NULL;bst.length 0;printf(isempty(1:true, 0:false): %d, length is %d\n, bst.rootNULL, bst.length);add(bst, 15);add(bst, 8);add(bst, 23);add(bst, 10);add(bst, 12);add(bst, 19);add(bst, 6);printf(isempty(1:true, 0:false): %d, length is %d\n, bst.rootNULL, bst.length);printf(midtravel: );midtravel(bst.root);printf(\n);printf(pretravel: );pretravel(bst.root);printf(\n);printf(posttravel: );posttravel(bst.root);printf(\n);printf(find 10 (1:true, 0:false): %d\n, find(bst.root, 10));printf(find 9 (1:true, 0:false): %d\n, find(bst.root, 9));delete(bst, 23);delete(bst, 15);delete(bst, 6);printf(isempty(1:true, 0:false): %d, length is %d\n, bst.rootNULL, bst.length);printf(midtravel: );midtravel(bst.root);printf(\n);printf(pretravel: );pretravel(bst.root);printf(\n);printf(posttravel: );posttravel(bst.root);printf(\n);return 0; }/* subfunction */ LinkNode *createNode(int data) // create a node {LinkNode *node (LinkNode *)malloc(sizeof(LinkNode));if(node NULL){perror(Memory allocation failed);exit(-1);}node-value data;node-left NULL;node-right NULL;return node; }void add(LinkBST *bst, int data) // add element {// subfunction(recursion): add element to the binary search tree LinkNode *addNode(LinkNode *node, int data){if(node NULL){LinkNode *newnode createNode(data);node newnode;bst-length;return node;}if(data node-value) node-left addNode(node-left, data);else if(data node-value) node-right addNode(node-right, data);return node;}// root node receive the resultbst-root addNode(bst-root, data); }void delete(LinkBST *bst, int data) // delete element {// subfunction(recursion): delete element from the binary search tree LinkNode *del(LinkNode *node){if(node-left NULL){bst-length--;return node-right;}else if(node-right NULL){bst-length--;return node-left;}else if(node-left node-right){LinkNode *tmp node, *cur node-left;while(cur-right){tmp cur;cur cur-right;}node-value cur-value;if(tmp ! node) tmp-right cur-left;else tmp-left cur-left;bst-length--;return node;}}// subfunction: find delete node,return nodeLinkNode *delNode(LinkNode *node, int data){if(node NULL) return node;if(data node-value) node del(node);else if(data node-value) node-left delNode(node-left, data);else if(data node-value) node-right delNode(node-right, data);return node;} // root node receive the resultbst-root delNode(bst-root, data); }void pretravel(LinkNode *node) // show element one by one,(root,left,right) {if(node NULL) return ;printf(%d , node-value);pretravel(node-left);pretravel(node-right); }void midtravel(LinkNode *node) // show element one by one,(left,root,right) {if(node NULL) return ;midtravel(node-left);printf(%d , node-value);midtravel(node-right); }void posttravel(LinkNode *node) // show element one by one,(left,right,root) {if(node NULL) return ;posttravel(node-left);posttravel(node-right);printf(%d , node-value); }int find(LinkNode *node, int data) // if find data,return 1(true),or return 0(false) {if(node NULL) return 0;if(data node-value) return 1;if(data node-value) find(node-left, data);else if(data node-value) find(node-right, data); } 编译链接 gcc -o bst bst.c 执行可执行文件 ./bst
http://www.w-s-a.com/news/807182/

相关文章:

  • 宁波 住房和建设局网站网上发帖推广
  • 平面设计在线网站工业设计公司有哪些
  • 福州网站设计外包公司网站做的比较好
  • 如何设计网站首页网站开发综合技能实训心得体会
  • 用织梦做的网站好用吗w网站链接如何做脚注
  • 东莞做网站公司在哪哪里有网站培训的
  • 做宣传 为什么要做网站那重庆网站建设公司在线联系
  • 网站设计制作售价多少钱制作图片的软件是
  • 网站验证码目录简单带数据库的网站模版
  • 制作网站用c#做前台网站建设专题的意义
  • 广西建设职业技术学院教育网站牡丹区建设局网站
  • 网站后台怎么用ftp打开上海外贸进出口有限公司
  • 淘宝建设网站的意义大学生做那个视频网站
  • 如何提高你的网站的粘性建设银行流水网站
  • 微信h5在哪个网站做泰州专业网站制作公司
  • 现在.net做网站的多吗建设工程造价网
  • pc访问手机网站跳转违法网站开发人员
  • 网站前端做报名框wordpress 启动慢
  • 沈阳做网站客户多吗前端可以做网站吗
  • 网站设计规划书新媒体营销策略分析
  • dw个人网站主页怎么做天津工程信息建设网
  • 顺义做网站的公司网站页面设计基础教程
  • 安阳哪个公司做网站好企业没有做网站有的坏处
  • 网站开发有必要用php框架wordpress分页导航代码
  • wordpress建站seo鞍山制作网站哪家好
  • 网站空间流量查询上海门户网站制作
  • 网站开发技术是什么专业会的加强普法网站和普法网络集群建设
  • 上海建筑网站seo 推广
  • 乌兰察布做网站公司爱站网关键词挖掘工具站长工具
  • 白银网站建设白银申请网站空间怎么做