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

哪个网站做的系统好用吗如何分析网站的设计

哪个网站做的系统好用吗,如何分析网站的设计,最新房地产新闻,3d动画制作软件中文版目录 前言 二叉树的遍历 层序遍历 队列的代码 queuepush和queuepushbujia的区别 判断二叉树是否是完全二叉树 前序 中序 后序 功能展示 创建二叉树 初始化 销毁 简易功能介绍 二叉树节点个数 二叉树叶子节点个数 二叉树第k层节点个数 二叉树查找值为x的节点 判…目录 前言 二叉树的遍历 层序遍历 队列的代码 queuepush和queuepushbujia的区别 判断二叉树是否是完全二叉树 前序 中序 后序 功能展示 创建二叉树 初始化 销毁 简易功能介绍 二叉树节点个数 二叉树叶子节点个数 二叉树第k层节点个数 二叉树查找值为x的节点 判断是否为单值二叉数 判断二叉数高度 前言 本文讲解关于二叉树的创建和各种功能的实现重点讲解前中后和层序遍历的写法 层序遍历放到了本文前面先讲如果是刚接触二叉数可以先看功能展示 前中后序的遍历都用到了递归都写法 而层序遍历却不方便只能创建队列来解决 二叉树的遍历 层序遍历 层序遍历这里重点讲解一下 因为不能使用递归只好创建队列来帮助实现 队列的代码 头文件 typedef BTNode* QDataType;typedef struct QueueNode {struct QueueNode* next;QDataType val; }QNode;typedef struct Queue {QNode* phead;QNode* ptail;int size; }Queue;void QueueInit(Queue* pq); void QueueDestroy(Queue* pq);// 队尾插入 void QueuePush(Queue* pq, QDataType x); void QueuePushbujia(Queue* pq, QDataType x); // 队头删除 void QueuePop(Queue* pq);// 取队头和队尾的数据 QDataType QueueFront(Queue* pq); QDataType QueueBack(Queue* pq);int QueueSize(Queue* pq); bool QueueEmpty(Queue* pq); 源码 void QueueInit(Queue* pq) {assert(pq);pq-phead NULL;pq-ptail NULL;pq-size 0; }void QueueDestroy(Queue* pq) {assert(pq);QNode* cur pq-phead;while (cur){QNode* next cur-next;free(cur);cur next;}pq-phead pq-ptail NULL;pq-size 0; }// 队尾插入 void QueuePush(Queue* pq, QDataType x) {assert(pq);QNode* newnode (QNode*)malloc(sizeof(QNode));if (newnode NULL){perror(malloc fail);return;}newnode-next NULL;newnode-val x;if (pq-ptail NULL){pq-phead pq-ptail newnode;}else{pq-ptail-next newnode;pq-ptail newnode;}pq-size; }void QueuePushbujia(Queue* pq, QDataType x) {assert(pq);QNode* newnode (QNode*)malloc(sizeof(QNode));if (newnode NULL){perror(malloc fail);return;}newnode-next NULL;newnode-val x;if (pq-ptail NULL){pq-phead pq-ptail newnode;}else{pq-ptail-next newnode;pq-ptail newnode;} } // 队头删除 void QueuePop(Queue* pq) {assert(pq);assert(pq-size ! 0);/*QNode* next pq-phead-next;free(pq-phead);pq-phead next;if (pq-phead NULL)pq-ptail NULL;*/// 一个节点if (pq-phead-next NULL){free(pq-phead);pq-phead pq-ptail NULL;}else // 多个节点{QNode* next pq-phead-next;free(pq-phead);pq-phead next;}pq-size--; }QDataType QueueFront(Queue* pq) {assert(pq);assert(pq-phead);return pq-phead-val; }QDataType QueueBack(Queue* pq) {assert(pq);assert(pq-ptail);return pq-ptail-val; }int QueueSize(Queue* pq) {assert(pq);return pq-size; }bool QueueEmpty(Queue* pq) {assert(pq);return pq-size 0; }queuepush和queuepushbujia的区别 两个都是将数据尾插进去但bujia函数并不会对size加加 这样我们不仅可以正常打印N还不影响真实数据的打印 void BinaryTreeLevelOrder(BTNode* root) {assert(root);Queue a;QueueInit(a);BTNode* n BuyNode1(root-_data);n root;BTNode* null BuyNode1(N);printf(%c , n-_data);while (1){if (n-_left ! NULL){QueuePush(a, n-_left);}else{QueuePushbujia(a,null);}if (n-_right ! NULL){QueuePush(a, n-_right);}else{QueuePushbujia(a,null);}if (QueueEmpty(a)){break;}n QueueFront(a);QueuePop(a);if (n-_data N){a.size;}printf(%c , n-_data);} } 每拿出一个头数据时就会对size--这样的话如果为N的话很有可能会出现size减完了但实际数据没有打印完的情况 所以这里加入了判断n-_data等于N时应该让size  利用写出来的层序遍历就可以实现 判断二叉树是否是完全二叉树 i和x的作用 如果是完全二叉树遇到一个N后不可能再遇到N意外的数了 否则就是非完全二叉树 利用这一特征 当遇到第一个N时让i 如果i不等于0说明遇到过N了如果此时遇到了非N的数那么就让n 如果两个数同时不为0则为非完全二叉树 int BinaryTreeComplete(BTNode* root) {assert(root);Queue a;QueueInit(a);BTNode* n BuyNode1(root-_data);n root;BTNode* null BuyNode1(N);//printf(%c , n-_data);char pan x;int i 0;int x 0;while (1){if (n-_left ! NULL){QueuePush(a, n-_left);}else{QueuePushbujia(a, null);}if (n-_right ! NULL){QueuePush(a, n-_right);}else{QueuePushbujia(a, null);}if (QueueEmpty(a)){break;}n QueueFront(a);QueuePop(a);if (n-_data N){a.size;}//printf(%c , n-_data);pan n-_data;if (pan N){i;}if (i !0){if (pan ! N){x;}}if (i!0x!0){return 1;}}return 0; } 前序 void BinaryTreePrevOrder(BTNode* root) {if (root NULL){printf(N );return;}printf(%c , root-_data);BinaryTreePrevOrder(root-_left);BinaryTreePrevOrder(root-_right); } 中序 void BinaryTreeInOrder(BTNode* root) {if (root NULL){printf(N);return;}BinaryTreeInOrder(root-_left);printf(%c , root-_data);BinaryTreeInOrder(root-_right); } 后序 void BinaryTreePostOrder(BTNode* root) {if (root NULL){printf(N);return;}BinaryTreePostOrder(root-_left);BinaryTreePostOrder(root-_right);printf(%c , root-_data); } 功能展示 完成关于二叉树的如下功能 //初始化 BTNode* BuyNode1(BTDataType x);// 通过前序遍历的数组ABD##E#H##CF##G##构建二叉树 BTNode* BinaryTreeCreate(BTDataType* a, int n, int* pi); // 二叉树销毁 void BinaryTreeDestory(BTNode** root); // 二叉树节点个数 int BinaryTreeSize(BTNode* root); // 二叉树叶子节点个数 int BinaryTreeLeafSize(BTNode* root); // 二叉树第k层节点个数 int BinaryTreeLevelKSize(BTNode* root, int k); // 二叉树查找值为x的节点 BTNode* BinaryTreeFind(BTNode* root, BTDataType x); // 二叉树前序遍历 void BinaryTreePrevOrder(BTNode* root); // 二叉树中序遍历 void BinaryTreeInOrder(BTNode* root); // 二叉树后序遍历 void BinaryTreePostOrder(BTNode* root); // 层序遍历 void BinaryTreeLevelOrder(BTNode* root); // 判断二叉树是否是完全二叉树 int BinaryTreeComplete(BTNode* root); //判断是否为单值二叉数 bool isUnivalTree(struct BTNode* root); //判断二叉数高度 int maxDepth(struct BTNode* root); 创建二叉树 手动创建一个二叉树可以让后面的功能更方便调试 首先确定结构体内容如下 typedef char BTDataType;typedef struct BinaryTreeNode {BTDataType _data;struct BinaryTreeNode* _left;struct BinaryTreeNode* _right; }BTNode; 在进行手动创建一个二叉树 创建之前需要初始化结构体 初始化 //初始化 BTNode* BuyNode1(BTDataType x) {BTNode* n (BTNode*)malloc(sizeof(BTNode));if (n NULL){perror(malloc false);return NULL;}n-_data x;n-_left NULL;n-_right NULL;return n; } 有了初始化代码就可以正式创建二叉树了  BTNode* headadd() {BTNode* a1 BuyNode1(a);BTNode* a2 BuyNode1(b);BTNode* a3 BuyNode1(c);BTNode* a4 BuyNode1(d);BTNode* a5 BuyNode1(e);a1-_left a2;a1-_right a3;a2-_left a4;a4-_right a5;return a1; } 此时二叉树就建好了 有了初始化就需要有销毁防止内存泄漏 销毁 使用递归思想比较方便 void BinaryTreeDestory(BTNode** root) {assert(root);assert(*root);BinaryTreeDestory(((*root)-_left));BinaryTreeDestory(((*root)-_right));free(*root);*root NULL; } 简易功能介绍 大多数采用递归的方法即可轻松解决 二叉树节点个数 int BinaryTreeSize(BTNode* root) {if (root NULL){return 0;}return 1BinaryTreeSize(root-_left)BinaryTreeSize(root-_right); 二叉树叶子节点个数   int BinaryTreeLeafSize(BTNode* root) {if (root NULL){return 0;}if (root-_left NULL root-_right NULL){return 1;}return BinaryTreeLeafSize(root-_left)  BinaryTreeLeafSize(root-_right); } 二叉树第k层节点个数   int BinaryTreeLevelKSize(BTNode* root, int k) {if (root NULL||k1){return 0;}if (root!NULLk 1){return 1;}return BinaryTreeLevelKSize(root-_left, k - 1) BinaryTreeLevelKSize(root-_right, k - 1); } 二叉树查找值为x的节点   BTNode* BinaryTreeFind(BTNode* root, BTDataType x) {if (root NULL){return NULL;}if (root-_data x){return root;}BTNode* lf BinaryTreeFind(root-_left, x);if (lf ! NULL){return lf;}BTNode* lr BinaryTreeFind(root-_right, x);if (lr ! NULL){return lr;}return NULL; } 判断是否为单值二叉数 bool isUnivalTree(BTNode* root) {if (root NULL){return true;}if (root-_left){if (root-_data! root-_left-_data){return false;}}if (!isUnivalTree(root-_left)){return false;}if (root-_right){if (root-_data ! root-_right-_data){return false;}}if (!isUnivalTree(root-_right)){return false;}return true; } 判断二叉数高度 int maxDepth(BTNode* root) {if (root NULL){return 0;}int leftsize maxDepth(root-_left);int rightsize maxDepth(root-_right);return leftsize rightsize ? leftsize 1 : rightsize 1; }
http://www.dnsts.com.cn/news/167272.html

相关文章:

  • 领优惠卷的网站怎么做30秒牢记5个域名
  • 网站特效 素材电子商务网站推广计划
  • 社交网站的优点和缺点网页展示模板
  • 大学生怎么做网站知名品牌形象策划公司
  • 福建网站开发工程造价信息网官网查询
  • 网站建设 上海网站建重庆广告制作加工厂
  • 网站开发服务计入什么科目辽阳网站制作
  • 纺织面料做哪个网站好wordpress特效代码
  • 网站制作设计收费网站收录不好怎么办
  • 爱 做 网站自做网站打开速度慢
  • qq开放平台无锡seo关键词排名
  • 做网站规避什么网络设计概念
  • 网站建设的功能需求分析策划书厦门官方网站建设
  • 郴州网红打卡餐厅seo查询官网
  • 网站做电子公章违法吗公司名字logo免费设计
  • 丽水做网站的公司四川网站建设哪家专业
  • 安阳中飞网站建设如何在自己网站添加链接
  • 付费网站做推广哪个好定制网站制作公司有哪些
  • 安康网站设计网页制作工具的选择与网站整体风格是有关系的
  • 哈尔滨模板建站服务商网站需要哪些费用
  • seo网站优化方案书怎么给QQ名片做网站
  • 网站上的付费文章怎么做网上推广产品哪个平台效果好
  • 做的比较好的p2p网站免费建设网站的方法
  • 网站续费如何做分录北京市住房建设投资中心网站
  • 河间网站建设公司怎么做可以使网站跳转
  • 移动网站开发 王府井黑龙江建设网官网网上服务大厅
  • cmsv7厦门seo全网营销
  • 网站概要设计模板家具设计软件下载
  • 热 综合-网站正在建设中嘉兴网课
  • 网站公司后台通州网站网站建设