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

闽清建设局网站做网站时候如果添加微信代码

闽清建设局网站,做网站时候如果添加微信代码,怎样用xampp做网站,做seo有什么好处本文是小编巩固自身而作,如有错误,欢迎指出! 之前已经简介过儿二叉树的基本概念和基于数组的堆的实现,如有兴趣可以访问 【数据结构】堆 1.链式二叉树的概念 所谓链式二叉树,就是基于链表的结构构成的二叉树。通常…

 本文是小编巩固自身而作,如有错误,欢迎指出!

之前已经简介过儿二叉树的基本概念和基于数组的堆的实现,如有兴趣可以访问

【数据结构】堆

1.链式二叉树的概念

所谓链式二叉树,就是基于链表的结构构成的二叉树。通常的⽅法 是链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别⽤来给出该结点左孩⼦和右孩 ⼦所在的链结点的存储地址。

2.链式二叉树的实现 

2.1链式二叉树结构声明

typedef char btdatatype;
typedef struct binarytreenode
{btdatatype data;struct binarytreenode* left;struct binarytreenode* right;
}BTnode;

2.2创建一个简单的链式二叉树 

BTnode* creatbinarytree()
{BTnode* nodeA = buynode('A');BTnode* nodeB = buynode('B');BTnode* nodeC = buynode('C');BTnode* nodeD = buynode('D');BTnode* nodeE = buynode('E');BTnode* nodeF = buynode('F');nodeA->left = nodeB;nodeA->right = nodeC;nodeB->left = nodeD;nodeC->left = nodeE;nodeC->right = nodeF;return nodeA;}

ps:相关函数会在文章末尾统一展示

3.前中后序遍历

⼆叉树的操作离不开树的遍历,我们先来看看⼆叉树的遍历有哪些⽅式。

3.1遍历规则

按照规则,⼆叉树的遍历有:前序/中序/后序的递归结构遍历:

1.前序遍历(PreorderTraversal亦称先序遍历):访问根结点的操作发⽣在遍历其左右⼦树之前

 访问顺序为:根结点、左⼦树、右⼦树

2.中序遍历(InorderTraversal):访问根结点的操作发⽣在遍历其左右⼦树之中(间)

访问顺序为:左⼦树、根结点、右⼦树

3.后序遍历(PostorderTraversal):访问根结点的操作发⽣在遍历其左右⼦树之后

 访问顺序为:左⼦树、右⼦树、根结点

 3.1.1遍历的思想

我们在链式二叉树的遍历中一般采用递归思想,如下图所示

3.1.2前序遍历

void preorder(BTnode* root)//前序遍历,中左右
{if (root == NULL){printf("NULL ");return;}printf("%c ", root->data);preorder(root->left);preorder(root->right);
}

 因为是前序所以在访问节点时先对储存数据的部分进行操作,打印出来后进行下一步。

当遇到下一个节点为空时就返回。

结果如图

3.1.3中序遍历 

void inorder(BTnode* root)//中序遍历,左中右
{if (root == NULL){printf("NULL ");return;inorder(root->left);printf("%c ", root->data);inorder(root->right);}
}

3.1.4后序遍历

void postorder(BTnode* root)//后序遍历,左右根
{if (root == NULL){printf("NULL ");return;}postorder(root->left);postorder(root->right);printf("%c ", root->data);}

3.2求二叉树节点个数 

如果需要求一个二叉树节点的个数,我们需要怎么做呢

我们这里提供两个方法

首先是创建一个变量size,每经历一个节点,让其自加。

int BinaryTreeSize2(BTnode* root,int* psize)//求二叉树节点个数
{if (root == NULL){printf("%p\n", root);return 0;}(*psize)++;BinaryTreeSize2(root->left,psize);BinaryTreeSize2(root->right,psize);return *psize;}

第二个思路就是不额外创建变量, 用经历过节点的数目直接实现

int BinaryTreeSize1(BTnode* root)
{if (root == NULL){return 0;}return 1 + BinaryTreeSize1(root->left)+ BinaryTreeSize1(root->right);
}

3.3求二叉树的深度

int BinaryTreeDepth(BTnode* root)//求二叉树深度
{if (root == NULL){return 0;}int leftdep = BinaryTreeDepth(root->left);int rightdep = BinaryTreeDepth(root->right);return 1 + (leftdep > rightdep ? leftdep : rightdep);
}

其思想就是走到最下层节点,向上每一层加一。

3.4二叉树的查找函数 

BTnode* BinaryTreeFind(BTnode* root, btdatatype x)//在二叉树中查找
{if (root == NULL){return NULL;}if (root->data == x){return root;}BTnode* leftfind = BinaryTreeFind(root->left, x);if (leftfind)//如果左子树未找到{return leftfind;}BTnode* rightfind= BinaryTreeFind(root->right, x);if (rightfind){return rightfind;}return NULL;
}

先遍历左子树数,再遍历右子树进行查找。

4.层序遍历

  除了先序遍历、中序遍历、后序遍历外,还可以对⼆叉树进⾏层序遍历。设⼆叉树的根结点所在层数 为1,层序遍历就是从所在⼆叉树的根结点出发,⾸先访问第⼀层的树根结点,然后从左到右访问第2 层上的结点,接着是第三层的结点,以此类推,⾃上⽽下,⾃左⾄右逐层访问树的结点的过程就是层 序遍历。

而层序遍历需要借助一个我们学过的数据结构,队列,其相对应知识可以看前文

【数据结构】栈与队列

其核心思想就是当首先放进去的节点记录,将其取出,判断其两个子节点是否为空,如果非空就将其放入,然后循环这个过程,直至将队列的所有数据取出来

void leverorder(BTnode* root)//层序遍历
{QU q;QUinit(&q);QUpushi(&q, root);while (!QUempty(&q))//当队列不为时{//取队头,出队头BTnode* top = QUfront(&q);QUpop(&q);printf("%c ", top->data);//将队头非空左右孩子入列if (top->left)QUpushi(&q, top->left);if (top->right)QUpushi(&q, top->right);}}

5.完整代码实现

.h文件

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
typedef char btdatatype;
typedef struct binarytreenode
{btdatatype data;struct binarytreenode* left;struct binarytreenode* right;
}BTnode;void preorder(BTnode* root);//前序遍历,中左右
void inorder(BTnode* root);//中序遍历,左中右
BTnode* buynode(char x);//创建节点
int BinaryTreeSize1(BTnode* root);//求二叉树节点个数
int BinaryTreeSize2(BTnode* root,int* psize);//求二叉树节点个数
int BinaryTreeDepth(BTnode* root);//求二叉树深度
BTnode* BinaryTreeFind(BTnode* root, btdatatype x);//在二叉树中查找
void BinaryTreeDestory(BTnode** root);//二叉树销毁
void leverorder(BTnode* root);//层序遍历

.c文件 

#define _CRT_SECURE_NO_WARNINGS
#include"tree.h"
#include"Queue.h"BTnode* buynode(char x)
{BTnode* node = (BTnode*)malloc(sizeof(BTnode));if (node == NULL){perror("malloc fail");exit(1);}node->data = x;node->left = node->right = NULL;return node;
}void preorder(BTnode* root)//前序遍历,中左右
{if (root == NULL){printf("NULL ");return;}printf("%c ", root->data);preorder(root->left);preorder(root->right);
}
void inorder(BTnode* root)//中序遍历,左中右
{if (root == NULL){printf("NULL ");return;inorder(root->left);printf("%c ", root->data);inorder(root->right);}
}
void postorder(BTnode* root)//后序遍历,左右根
{if (root == NULL){printf("NULL ");return;}postorder(root->left);postorder(root->right);printf("%c ", root->data);}int BinaryTreeSize2(BTnode* root,int* psize)//求二叉树节点个数
{if (root == NULL){printf("%p\n", root);return 0;}(*psize)++;BinaryTreeSize2(root->left,psize);BinaryTreeSize2(root->right,psize);return *psize;}
int BinaryTreeSize1(BTnode* root)
{if (root == NULL){return 0;}return 1 + BinaryTreeSize1(root->left)+ BinaryTreeSize1(root->right);
}int BinaryTreeDepth(BTnode* root)//求二叉树深度
{if (root == NULL){return 0;}int leftdep = BinaryTreeDepth(root->left);int rightdep = BinaryTreeDepth(root->right);return 1 + (leftdep > rightdep ? leftdep : rightdep);
}BTnode* BinaryTreeFind(BTnode* root, btdatatype x)//在二叉树中查找
{if (root == NULL){return NULL;}if (root->data == x){return root;}BTnode* leftfind = BinaryTreeFind(root->left, x);if (leftfind)//如果左子树未找到{return leftfind;}BTnode* rightfind= BinaryTreeFind(root->right, x);if (rightfind){return rightfind;}return NULL;
}
void BinaryTreeDestory(BTnode** root)//二叉树的销毁
{if (*root == NULL){return;}BinaryTreeDestory(&((*root)->left));BinaryTreeDestory(&((*root)->right));free(*root);*root = NULL;
}
void leverorder(BTnode* root)//层序遍历
{QU q;QUinit(&q);QUpushi(&q, root);while (!QUempty(&q))//当队列不为时{//取队头,出队头BTnode* top = QUfront(&q);QUpop(&q);printf("%c ", top->data);//将队头非空左右孩子入列if (top->left)QUpushi(&q, top->left);if (top->right)QUpushi(&q, top->right);}}

.c文件(测试)

#define _CRT_SECURE_NO_WARNINGS
#include"tree.h"
BTnode* creatbinarytree()
{BTnode* nodeA = buynode('A');BTnode* nodeB = buynode('B');BTnode* nodeC = buynode('C');BTnode* nodeD = buynode('D');BTnode* nodeE = buynode('E');BTnode* nodeF = buynode('F');nodeA->left = nodeB;nodeA->right = nodeC;nodeB->left = nodeD;nodeC->left = nodeE;nodeC->right = nodeF;return nodeA;}
void test01()
{BTnode* root = creatbinarytree();preorder(root);/*if (BinaryTreeFind(root, 'F')){printf("找到了\n");}else{printf("没找到\n");}*/
}
void test02()
{BTnode* root = creatbinarytree();int size = 0;printf("size:%d\n", BinaryTreeSize1(root));printf("size:%d\n", BinaryTreeSize2(root,&size));
}
void test03()
{BTnode* root = creatbinarytree();leverorder(root);
}
int main()
{test01();//test02();/*test03();*/return 0;
}

本次的分享就到这里了,感谢阅读!


文章转载自:

http://FLj0UvrY.kgsws.cn
http://tro0DoGx.kgsws.cn
http://JP2bYYVl.kgsws.cn
http://1zW1QSpb.kgsws.cn
http://o8WVV6IU.kgsws.cn
http://08wyVHh0.kgsws.cn
http://HwZyNOt5.kgsws.cn
http://v9DtR5Qh.kgsws.cn
http://KLEdmM5l.kgsws.cn
http://PU1RYJgM.kgsws.cn
http://8lCIZsZj.kgsws.cn
http://9qoOowgA.kgsws.cn
http://e6UBTYph.kgsws.cn
http://7TrvLHgM.kgsws.cn
http://SH51m3vk.kgsws.cn
http://eZwegXNX.kgsws.cn
http://gXngKg5D.kgsws.cn
http://o5DU2QS5.kgsws.cn
http://TDzL60X7.kgsws.cn
http://fbnADcXP.kgsws.cn
http://b1utUcix.kgsws.cn
http://9M8g0pz0.kgsws.cn
http://n48vZz5D.kgsws.cn
http://Y1m1djMv.kgsws.cn
http://MyfZ3iVK.kgsws.cn
http://n3zWIChD.kgsws.cn
http://PpvxthS0.kgsws.cn
http://omHdeNoJ.kgsws.cn
http://OEuhFbrF.kgsws.cn
http://oj1JDNEC.kgsws.cn
http://www.dtcms.com/wzjs/751137.html

相关文章:

  • 河南省做网站的公司宜宾网站建设哪家好
  • 网站字体大小是多少canva 可画人物插画
  • 网站建设接私活平台基于网站开发app
  • 淘宝客云建站官网wordpress 多站 列表
  • 网站用什么语言开发wordpress内涵主题
  • 具有价值的微网站建设中国建设银行网站密码
  • 气血不足做网站怎样创建个人购物网站
  • phpwind网站wordpress管理员密码忘
  • 网站建设实习困难橱柜衣柜做网站
  • 西安分销商城网站建设百度登录入口
  • 帮别人起名 做ppt的网站在线申请营业执照
  • 网站如何做seo排名wordpress淘点金
  • wordpress怎么更换网站logo网站建设vip教程
  • 网站空间租用哪个好哈尔滨专业制作网站制作
  • 中小型网站服务器搭建方案沂南网站优化
  • 私人怎么做彩票网站平台备案期间网站
  • 齐齐哈尔铁峰建设局网站网络公司
  • 微网站 举例制作响应式网站报价
  • 惠州网站建设外包自做建材配送网站
  • 积极推进在线网站建设台州网页设计与制作
  • 网站制作优化济南响应式购物网站设计
  • 企业建网站报价果洛电子商务网站建设多少钱
  • 建设外贸网站要多少钱企业标识设计公司
  • 网站转化率中企动力企业邮箱官网
  • 建设部官网网站搜索引擎营销的典型案例
  • 哪些网站使用vue做的高安网站找工作做面点事
  • 电子商务网站策划方案网站建设网站设计哪家专业
  • 介绍在家里做的点心的网站怎么进入公众号
  • dedecms怎么把一个网站的文章导出导到另一个站里网站建设费与网络维护费区别
  • 上海 食品网站设计百度权重是怎么来的