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

网站编辑如何做百度官方网站首页

网站编辑如何做,百度官方网站首页,西安企业模板网站建设,做简历用的网站树 ​ 树是 n(n≥0)个结点的有限集。当 n 0时,称为空树。在任意一颗非空树中应满足: (1)有且仅有一个特定的称为根的结点。 (2)当 n > 1时,其余结点可分为 m&…

​ 树是 n(n≥0)个结点的有限集。当 n = 0时,称为空树。在任意一颗非空树中应满足:

(1)有且仅有一个特定的称为根的结点。

(2)当 n > 1时,其余结点可分为 m(m > 0)个互不相交的有限集T1, T2, …, Tm,其中每个集合本身又是一棵树,并且称为根的子树。

​ 树作为一种逻辑结构,同时也是一种分层结构,具有以下两个特点:

(1)树的根结点没有前驱,除根结点外的所有结点有且只有一个前驱。

(2)树中所有结点可以有零个或多个后继。
请添加图片描述

二叉树

​ 二叉树是另一种树形结构,其特点是每个结点至多只有两颗字数(即二叉树中不存在度大于2的结点),并且二叉树的子树有左右之分,其次序不能任意颠倒。

​ 与树相似,二叉树也以递归的形式定义,二叉树是 n(n ≥ 0)个结点的有限集合:

(1)或者为空二叉树,即 n = 0。

(2)或者由一个根结点和两个互不相交的被称为根的左子树和右子树组成。左子树和右子树分别是一颗二叉树。

满二叉树:

如果一棵二叉树只有度为0的节点和度为2的节点,并且度为0的节点在同一层上,则这棵二叉树为满二叉树 。

1
2
3
4
5
6
7

完全二叉树:

深度为k,有n个节点的二叉树当且仅当其每一个节点都与深度为k的满二叉树中编号从1到n的节点一一对应时,称为完全二叉树。

1
2
3
4
5
6

普通二叉树:

1
2
3
4
5
6
7
8
9
10
A
B
D
C

二叉查找树:

二叉查找树又称二叉排序树或者二叉搜索树。

1
2
3
4
5
6
7
8
9
10
A
B
D
C

特点:

  • 每个节点上最多有两个子节点。
  • 左子树上所有节点的值都小于根节点的值。
  • 右子树上所有节点的值都大于根节点的值。

目的:

  • 提高检索数据的性能。

二茶树的链式存储

typedef char BiElemType;
typedef struct BiTNode {BiElemType data;struct BiTNode *lchild;struct BiTNode *rchild;
}

请添加图片描述

二叉树建树

#include <stdio.h>
#include <stdlib.h>typedef char BiElemType;
// 树结点
typedef struct BiTNode {// 数据BiElemType data;// 左子树struct BiTNode *lchild;// 右子树struct BiTNode *rchild;} BiTNode, *BiTree;// 用于构建辅助链队结点
typedef struct LinkNode {// 用于存储树的某一个结点的地址BiTree p_tree;struct LinkNode *next;
} LinkNode;int main() {// 创建树根BiTree Tree = NULL;// 用来指向新申请的树结点BiTree tree_new_node;// 队列头 队列尾 队列新结点 当前树的父结点(要插入结点的位置)LinkNode *q_head = NULL, *q_tail = NULL, *q_new_node = NULL, *q_cur = NULL;char c;while (scanf("%c", &c)) {if ('\n' == c) {break;}// 申请树结点// calloc 申请空间并对空间进行初始化为0tree_new_node = (BiTree) calloc(1, sizeof(BiTNode));tree_new_node->data = c;// 队列新结点q_new_node = (LinkNode *) calloc(1, sizeof(LinkNode));// 新结点p_tree存储新的树结点地址q_new_node->p_tree = tree_new_node;q_new_node->next = NULL;// 如果树为空if (NULL == Tree) {// 树根Tree = tree_new_node;// 队首q_head = q_new_node;// 队尾q_tail = q_new_node;// 当前树的父结点(要插入结点的位置)q_cur = q_new_node;// 结束本次循环continue;} else {// 新结点放入队列中q_tail->next = q_new_node;// 新结点成为新尾部q_tail = q_new_node;}// 当前父结点插入左子树if (NULL == q_cur->p_tree->lchild) {q_cur->p_tree->lchild = tree_new_node;} else if (NULL == q_cur->p_tree->rchild) {q_cur->p_tree->rchild = tree_new_node;//当前父结点左右子树都有了 队列下一个结点作为树的父结点q_cur = q_cur->next;}}return 0;
}

二叉树遍历

深度优先遍历

二叉树的深度优先遍历有三种方式,前序遍历、中序遍历、后序遍历。

  • 前序遍历是先打印自身,再打印左子树,再打印右子树。
  • 中序遍历是先打印左子树,再打印自身,再打印右子树,中序遍历相当于把树压扁。
  • 后序遍历是先打印左子树,再打印右子树,最后打印当前结点。
#include <stdio.h>
#include <stdlib.h>typedef char BiElemType;
// 树结点
typedef struct BiTNode {// 数据BiElemType data;// 左子树struct BiTNode *lchild;// 右子树struct BiTNode *rchild;} BiTNode, *BiTree;// 用于构建辅助链队结点
typedef struct LinkNode {// 用于存储树的某一个结点的地址BiTree p_tree;struct LinkNode *next;
} LinkNode;/** 先序遍历* 用递归思想解决 把每个结点看作一棵树*/
void pre_order(BiTree p) {if (NULL != p) {// 本身printf("%c", p->data);// 左子树pre_order(p->lchild);// 右子树pre_order(p->rchild);}
}/** 中序遍历* 用递归思想解决 把每个结点看作一棵树*/
void in_order(BiTree p) {if (NULL != p) {// 左子树in_order(p->lchild);// 本身printf("%c", p->data);// 右子树in_order(p->rchild);}
}/** 后续遍历* 用递归思想解决 把每个结点看作一棵树*/
void post_order(BiTree p) {if (NULL != p) {// 左子树post_order(p->lchild);// 右子树post_order(p->rchild);// 本身printf("%c", p->data);}
}int main() {// 创建树根BiTree Tree = NULL;// 用来指向新申请的树结点BiTree tree_new_node;// 队列头 队列尾 队列新结点 当前树的父结点(要插入结点的位置)LinkNode *q_head = NULL, *q_tail = NULL, *q_new_node = NULL, *q_cur = NULL;char c;while (scanf("%c", &c)) {if ('\n' == c) {break;}// 申请树结点// calloc 申请空间并对空间进行初始化为0tree_new_node = (BiTree) calloc(1, sizeof(BiTNode));tree_new_node->data = c;// 队列新结点q_new_node = (LinkNode *) calloc(1, sizeof(LinkNode));// 新结点p_tree存储新的树结点地址q_new_node->p_tree = tree_new_node;q_new_node->next = NULL;// 如果树为空if (NULL == Tree) {// 树根Tree = tree_new_node;// 队首q_head = q_new_node;// 队尾q_tail = q_new_node;// 当前树的父结点(要插入结点的位置)q_cur = q_new_node;// 结束本次循环continue;} else {// 新结点放入队列中q_tail->next = q_new_node;// 新结点成为新尾部q_tail = q_new_node;}// 当前父结点插入左子树if (NULL == q_cur->p_tree->lchild) {q_cur->p_tree->lchild = tree_new_node;} else if (NULL == q_cur->p_tree->rchild) {q_cur->p_tree->rchild = tree_new_node;//当前父结点左右子树都有了 队列下一个结点作为树的父结点q_cur = q_cur->next;}}// 先序遍历printf("Pre Order: ");pre_order(Tree);printf("\n");// 中序遍历printf("In Order: ");in_order(Tree);printf("\n");// 后序遍历printf("Post Order: ");post_order(Tree);printf("\n");return 0;
}

输入结果:

abcdefghi
Pre Order: abdhiecfg
In Order: hdibeafcg
Post Order: hidebfgcaProcess finished with exit code 0

广度优先遍历

​ 层次遍历是一种广度优先遍历,层次遍历与层次建树的原理非常相似。层次遍历必须试用辅助队列。

#include <stdio.h>
#include <stdlib.h>typedef char BiElemType;
// 树结点
typedef struct BiTNode {// 数据BiElemType data;// 左子树struct BiTNode *lchild;// 右子树struct BiTNode *rchild;} BiTNode, *BiTree;// 用于构建辅助链队结点
typedef BiTNode ElemType;
typedef struct LinkNode {ElemType *data;struct LinkNode *next;
} LinkNode;
typedef struct LinkQueue {LinkNode *front, *rear;
} LinkQueue;/** 队列初始化*/
void init_queue(LinkQueue &Q) {Q.front = Q.rear = (LinkNode *) malloc(sizeof(LinkNode));Q.front->next = NULL;
}/** 队列是否为空*/
bool queue_empty(LinkQueue Q) {return Q.front == Q.rear;
}/** 入队*/
void enqueue(LinkQueue &Q, BiTree T) {LinkNode *s = (LinkNode *) malloc(sizeof(LinkNode));s->data = T;s->next = NULL;Q.rear->next = s;Q.rear = s;
}/** 出队*/
bool dequeue(LinkQueue &Q, BiTree &T) {// 队列为空if (queue_empty(Q)) {return false;}LinkNode *p = Q.front->next;T = p->data;Q.front->next = p->next;if (Q.rear == p) {Q.rear = Q.front;}free(p);return true;
}/** 层序遍历** 跟层次建树几乎一样 用辅助队列实现*/
void level_order(BiTree T) {LinkQueue Q;init_queue(Q);// 树根入队enqueue(Q, T);// 从队列出队的树结点BiTree p;// 队列不为空while (!queue_empty(Q)) {// 出队dequeue(Q, p);putchar(p->data);// 判断当前结点是否有左孩子if (NULL != p->lchild) {// 左孩子入队enqueue(Q, p->lchild);}// 判断当前结点是否有右孩子if (NULL != p->rchild) {// 右孩子入队enqueue(Q, p->rchild);}}}int main() {// 创建树根BiTree Tree = NULL;// 用来指向新申请的树结点BiTree tree_new_node;// 队列头 队列尾 队列新结点 当前树的父结点(要插入结点的位置)LinkNode *q_head = NULL, *q_tail = NULL, *q_new_node = NULL, *q_cur = NULL;char c;while (scanf("%c", &c)) {if ('\n' == c) {break;}// 申请树结点// calloc 申请空间并对空间进行初始化为0tree_new_node = (BiTree) calloc(1, sizeof(BiTNode));tree_new_node->data = c;// 队列新结点q_new_node = (LinkNode *) calloc(1, sizeof(LinkNode));// 新结点p_tree存储新的树结点地址q_new_node->data = tree_new_node;q_new_node->next = NULL;// 如果树为空if (NULL == Tree) {// 树根Tree = tree_new_node;// 队首q_head = q_new_node;// 队尾q_tail = q_new_node;// 当前树的父结点(要插入结点的位置)q_cur = q_new_node;// 结束本次循环continue;} else {// 新结点放入队列中q_tail->next = q_new_node;// 新结点成为新尾部q_tail = q_new_node;}// 当前父结点插入左子树if (NULL == q_cur->data->lchild) {q_cur->data->lchild = tree_new_node;} else if (NULL == q_cur->data->rchild) {q_cur->data->rchild = tree_new_node;//当前父结点左右子树都有了 队列下一个结点作为树的父结点q_cur = q_cur->next;}}// 层次遍历printf("Level Order: ");level_order(Tree);return 0;
}

输出结果:

abcdefghi
Level Order: abcdefghiProcess finished with exit code 0
http://www.dinnco.com/news/20635.html

相关文章:

  • php学校网站源码关键词排名优化价格
  • 苏州建站免费模板深圳信息公司做关键词
  • 怎么在国际网站做推广免费seo营销优化软件下载
  • flash做网站步骤淄博新闻头条最新消息
  • 网赌网站国外空间推广app的营销方案
  • 做微商网站营销渠道名词解释
  • 做机械最好的b2b网站产品网络营销分析
  • 外国语学院英文网站建设百度关键词优化排名
  • 唐山网站优化营销失败案例分析
  • 深圳龙华网站建设百度搜索关键词
  • 360免费网站空间百度关键词怎么排名
  • 我做推广找不到我的网站靠谱seo整站优化外包
  • python做网站性能seo快速排名软件案例
  • 东莞虎门高铁站百度免费推广有哪些方式
  • 网站站开发 流量网站推广的基本方法是
  • wordpress个人网站郑州网站建设价格
  • 有没有专门做毕业设计的网站如何快速推广一个新产品
  • 嘉兴招聘网seo前线
  • 淘宝上做网站靠谱吗网站测速
  • 石湾手机网站建设站外推广免费网站
  • 网站模板 餐饮推广策划
  • 做网站的参考文献有哪些北京seo优化哪家好
  • 做视频的网站多少钱郑州网站推广公司电话
  • 如何免费建设网站快速网站排名优化
  • 苹果cms免费模板seo推广平台服务
  • 中山民众网站建设郑州网站排名推广
  • 担路做网站seo自动刷外链工具
  • 怎么网站设计珠海百度关键词优化
  • 公司网络宣传推广方案天津seo排名公司
  • 做网站必须要注册公司么磁力搜索器