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

网站做苏州百度推广服务中心

网站做,苏州百度推广服务中心,怎么创建小程序卖东西,windows和wordpress实现链式结构的二叉树 实现链式结构的二叉树遍历前序遍历中序遍历后序遍历 节点个数叶子节点个数⼆叉树第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://www.dtcms.com/wzjs/505106.html

相关文章:

  • 黑河市网站建设公司如何免费自己创建网站
  • 微商城网站建设新闻公司网站建设开发
  • 北京平台网站建设价位网店运营是做什么的
  • 加强意识形态建设 办好政协网站推广获客
  • 用织梦做的政府网站seo排名优化怎样
  • 网页设计的就业和发展前景哪家网站优化公司好
  • 个人网站页面关键词排名优化易下拉技术
  • 平台型网站开发湖北seo推广
  • 网站建设行业分析网站要怎么创建
  • 广州网站设计推荐刻企业网站的作用和意义
  • 在线测网速网站排名优化培训哪家好
  • 成都网站seo厂家seo推广灰色词
  • 激光东莞网站建设网站建设在线建站
  • 京东网站建设案例论文公司网站制作需要多少钱
  • 做网站总费用整站关键词快速排名
  • 大连市卫生健康委员会网站网站优化关键词价格
  • wordpress表单的增加与查询宁波seo推广如何收费
  • asp网站做seo网络营销的企业有哪些
  • 做网站要多少像素抖音seo推广
  • 郑州网站优化外包头条指数
  • 个人备案的域名拿来做别的网站关键词难易度分析
  • 一个新网站要怎么做seo舆情分析报告范文
  • 衢州网站设计方案百度95099怎么转人工
  • 自己做的网站可以上架烟吗seo接单
  • 文化网站前置审批凡科建站官网登录
  • 做网站写概要设计中国十大公关公司排名
  • 淄博桓台网站建设报价提高网站排名
  • 微信网站建设电话网络服务商在哪咨询
  • 论证 政府门户网站建设大数据查询
  • 营销型网站sempk宁波关键词优化企业网站建设