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

校园门户网站 建设青岛网络优化推广公司

校园门户网站 建设,青岛网络优化推广公司,昆明网站推广价格,上海软件定制实现链式结构的二叉树 实现链式结构的二叉树遍历前序遍历中序遍历后序遍历 节点个数叶子节点个数⼆叉树第k层结点个数⼆叉树的深度/⾼度查找值为X的节点二叉树的销毁 层序遍历判断二叉树是否为完全二叉树 ⽤链表来表⽰⼀棵⼆叉树,即⽤链来指⽰元素的逻辑关系。 通常…

实现链式结构的二叉树

    • 实现链式结构的二叉树
      • 遍历
        • 前序遍历
        • 中序遍历
        • 后序遍历
      • 节点个数
      • 叶子节点个数
      • ⼆叉树第k层结点个数
      • ⼆叉树的深度/⾼度
      • 查找值为X的节点
      • 二叉树的销毁
    • 层序遍历
    • 判断二叉树是否为完全二叉树

⽤链表来表⽰⼀棵⼆叉树,即⽤链来指⽰元素的逻辑关系。 通常的⽅法是链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别⽤来给出该结点左孩⼦和右孩⼦所在的链结点的存储地址 ,

其结构如下:

typedef int BTDataType; // ⼆叉链 
typedef struct BinaryTreeNode 
{ struct BinTreeNode* left; // 指向当前结点左孩⼦ struct BinTreeNode* right; // 指向当前结点右孩⼦ BTDataType val; // 当前结点值域 
}BTNode;

遍历

前中后序遍历

前序遍历

也叫先根遍历

先遍历根节点,再遍历左子树,最后遍历右子树

左右根

image-20250122120904177 image-20250122121456060

A->B->D->NULL->NULL->NULL->C->E->NULL->NULL->F->NULL->NULL

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

先遍遍历左子树,,再遍历根节点,最后遍历右子树

左根右

image-20250122120908431 image-20250122122358193

NULL->D->NULL->B->NULL->A->NULL->E->NULL->C->NULL->F->NULL

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

先遍历左子树,再遍历右子树,最后遍历根节点

左右根

image-20250122120912308 image-20250122123010493

NULL->NULL->D->NULL->B->NULL->NULL->E->NULL->NULL->F->C->A

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

节点个数

节点个数 = 1(根节点)+ 左子树节点个数 + 右子树节点个数

// ⼆叉树结点个数 
int BinaryTreeSize(BTNode* root)
{if (root == NULL){return 0;}//节点个数 = 1(根节点)+ 左子树节点个数 + 右子树节点个数return 1 + BinaryTreeSize(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层结点个数

当k == 1,直接在当前节点返回,

当k != 1,继续向下一层递归,k-1

//⼆叉树第k层结点个数
int BinaryTreeLevelKSize(BTNode* root, int k)
{if (root == NULL){return 0;}if (k == 1){return 1;}return BinaryTreeLevelKSize(root->left, k - 1) + BinaryTreeLevelKSize(root->right, k - 1);
}

⼆叉树的深度/⾼度

//⼆叉树的深度/⾼度
int BinaryTreeDepth(BTNode* root)
{if (root == 0){return 0;}//高度 = max(左子树,右子树)+ 1return 1 + max(BinaryTreeDepth(root->left), BinaryTreeDepth(root->right));
}

查找值为X的节点

//⼆叉树查找值为x的结点
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;
}

层序遍历

按照层次依次遍历(从上到下,从左到右)

广度优先遍历

image-20250218160303782

思路:

使用队列,根节点入队,循环判断队列是否为空,不为空取队头,将队头结点左右孩子入队(非空)

//层序遍历
void LevelOrder(BTNode* root)
{Queue q;QueueInit(&q);QueuePush(&q, root);while (!QueueEmpty(&q)){//取队头,出队,将左右孩子(非空)入队BTNode* top = QueueFront(&q);QueuePop(&q);printf("%c ", top->data);if (top->left){QueuePush(&q,top->left);}if (top->right){QueuePush(&q, top->right);}}QueueDestory(&q);
}

判断二叉树是否为完全二叉树

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

// 判断⼆叉树是否是完全⼆叉树
bool BinaryTreeComplete(BTNode* root)
{Queue q;QueueInit(&q);QueuePush(&q, root);while (!QueueEmpty(&q)){//取队头,出队,将左右孩子(非空)入队BTNode* top = QueueFront(&q);QueuePop(&q);if (top == NULL){break;}//入队QueuePush(&q, top->left);QueuePush(&q, top->right);}//如果存在非空结点,是非完全二叉树while (!QueueEmpty(&q)){BTNode* top = QueueFront(&q);QueuePop(&q);if (top != NULL){QueueDestory(&q);return false;}}QueueDestory(&q);return true;
}

文章转载自:

http://Kkwy4BWm.cfqbL.cn
http://mYWg81EK.cfqbL.cn
http://zS4M2dQg.cfqbL.cn
http://mxqgUL5S.cfqbL.cn
http://gLFVH9tJ.cfqbL.cn
http://tCr75MAn.cfqbL.cn
http://B6eBAWhn.cfqbL.cn
http://p0tSU3uT.cfqbL.cn
http://okFSj5aX.cfqbL.cn
http://hNkVD2GH.cfqbL.cn
http://iC0iuu3u.cfqbL.cn
http://7a7F2mSv.cfqbL.cn
http://uRzwp5wx.cfqbL.cn
http://oLj7EOt5.cfqbL.cn
http://WTgsft9C.cfqbL.cn
http://zQu3TCZf.cfqbL.cn
http://KZVvUZU5.cfqbL.cn
http://Ya8XtxMT.cfqbL.cn
http://B41RP4TZ.cfqbL.cn
http://p4MbBwGX.cfqbL.cn
http://Xp1i072d.cfqbL.cn
http://8V6wNsnP.cfqbL.cn
http://k4YDod9r.cfqbL.cn
http://acV2vcjp.cfqbL.cn
http://WMTKDhue.cfqbL.cn
http://NTxkoTcI.cfqbL.cn
http://RPFJ2Gr3.cfqbL.cn
http://sIHi1zaD.cfqbL.cn
http://aWNHFutG.cfqbL.cn
http://aLTlgQgc.cfqbL.cn
http://www.dtcms.com/wzjs/607779.html

相关文章:

  • 网站建设流程文字稿手机百度旧版本下载
  • 潍坊市网站优化企业网站建设的三个核心问题
  • 建设投票网站的目的WordPress 模板 自适应
  • 企业内部网站设计wordpress 必备插件
  • 网站建设推广优化展厅设计ppt
  • 网页小游戏网站有哪些怎么对企业进行网站建设
  • 浙江省建设局城市平台网站企业网站建设合同方案
  • 自己服务器做网站主机一线全屋定制10大品牌
  • 云南高端网站制作价格媒体软文发布平台
  • 汕头个人建站模板开发游戏软件公司
  • 如何确定一个网站的关键词怎么制作自己的免费网站
  • react node.js网站开发wordpress注册弹出框
  • wordpress网站好慢南京网站设计网站建设
  • 地方门户网站源码商务信息网官网
  • 平乡网站制作网站建设教程速成
  • 东营网站设计多少钱免费网站图片素材
  • 福清可以做宣传的网站北京网站设计公司兴田德润怎么样
  • 网站开发培训光山微信电脑版官方下载
  • 怎么用电脑做网站虚拟空间西宁 网站建设
  • 做ppt的模板的网站创业商机
  • 编程入门自学网站中铁建设集团有限公司待遇
  • 本地服务器如何做网站wordpress插件买免费下载
  • 设计案例分享网站大学生做的广告短视频网站
  • 网站备案查询 美橙网最新远程网站建设服务器
  • 如何在行业门户网站上做推广恩施州建设局网站
  • 仿木鱼网络网站全国企业信用信息公开系统
  • 网站建设与管理 试卷wordpress放在二级目录
  • 网站建设与维护 唐清安产品营销策略怎么写
  • 在电脑上做网站的软件wordpress rss 文章
  • 链接关系 网站层次结构企业所得税税负率怎么算的