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

英文外贸网站制作潍坊新闻头条最新消息

英文外贸网站制作,潍坊新闻头条最新消息,深圳市住房和城乡和建设局网站,wordpress隐藏统计图表数据结构 | 二叉树的各种遍历 文章目录 数据结构 | 二叉树的各种遍历创建节点 && 创建树二叉树的前中后序遍历二叉树节点个数二叉树叶子节点个数二叉树第k层节点个数二叉树查找值为x的节点二叉树求树的高度二叉树的层序遍历判断二叉树是否是完全二叉树 我们本章来实现二…

数据结构 | 二叉树的各种遍历

文章目录

  • 数据结构 | 二叉树的各种遍历
    • 创建节点 && 创建树
    • 二叉树的前中后序遍历
    • 二叉树节点个数
    • 二叉树叶子节点个数
    • 二叉树第k层节点个数
    • 二叉树查找值为x的节点
    • 二叉树求树的高度
    • 二叉树的层序遍历
    • 判断二叉树是否是完全二叉树

我们本章来实现二叉树的这些功能

Tree.h

#pragma once#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
typedef int BTDataType;typedef struct BinaryTreeNode
{BTDataType data;struct BinaryTreeNode* left;struct BinaryTreeNode* right;
}BTNode;//创建节点
BTNode* BuyTreeNode(int x);
//创建树
BTNode* CreateTree();
// 二叉树销毁
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);
// 求树的高度
int TreeHeight(BTNode* root);
  • 我们先来几个简单的

创建节点 && 创建树

  • 直接手动个创建即可,很简单~~
//创建节点
BTNode* BuyTreeNode(int x)
{BTNode* root = (BTNode*)malloc(sizeof(BTNode));if (root == NULL){perror("malloc fail\n");exit(-1);}root->data = x;root->left = NULL;root->right = NULL;return root;
}
//创建树
BTNode* CreateTree()
{BTNode* node1 = BuyTreeNode(1);BTNode* node2 = BuyTreeNode(2);BTNode* node3 = BuyTreeNode(3);BTNode* node4 = BuyTreeNode(4);BTNode* node5 = BuyTreeNode(5);BTNode* node6 = BuyTreeNode(6);BTNode* node7 = BuyTreeNode(7);node1->left = node2;node1->right = node4;node2->left = node3;node4->left = node5;node4->right = node6;node5->right = node7;return node1;
}

二叉树的前中后序遍历

  • 这里也是很简单,也可以看做下图这样遍历,或者画一下递归展开图

在这里插入图片描述

// 二叉树前序遍历 
void BinaryTreePrevOrder(BTNode* root)
{if (root == NULL){printf("NULL ");return;}printf("%d ", root->data);BinaryTreePrevOrder(root->left);BinaryTreePrevOrder(root->right);
}
// 二叉树中序遍历
void BinaryTreeInOrder(BTNode* root)
{if (root == NULL){printf("NULL ");return;}BinaryTreeInOrder(root->left);printf("%d ", root->data);BinaryTreeInOrder(root->right);
}
// 二叉树后序遍历
void BinaryTreePostOrder(BTNode* root)
{if (root == NULL){printf("NULL ");return;}BinaryTreePostOrder(root->left);BinaryTreePostOrder(root->right);printf("%d ", root->data);
}

二叉树节点个数

  • 我们这里看一下递归展开图

在这里插入图片描述

int BinaryTreeSize(BTNode* root)
{return root == NULL ? 0 : BinaryTreeSize(root->left)+ BinaryTreeSize(root->right);
}

二叉树叶子节点个数

  • 为空就返回0
  • 不是空,是叶子,返回1
  • 不是空,也不是叶子,就递归左子树和右子树
int BinaryTreeLeafSize(BTNode* root)
{// 为空返回0if (root == NULL)return 0;//不是空,是叶子 返回1if (root->left == NULL && root->right == NULL)return 1;// 不是空 也不是叶子  分治=左右子树叶子之和return BinaryTreeLeafSize(root->left)+ BinaryTreeLeafSize(root->right);
}

二叉树第k层节点个数

  • k是1的时候就是一层,就返回1
  • 递归左子树加右子树,每次递归k-1
int BinaryTreeLevelKSize(BTNode* root, int k)
{if (root == NULL)return NULL;if (k == 1)return 1;//递归左子树加右子树,每次递归k-1return 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* ret1 = BinaryTreeFind(root->left, x);if (ret1)return ret1;//右子树BTNode* ret2 = BinaryTreeFind(root->right, x);if (ret2)return ret2;return NULL;
}

二叉树求树的高度

  • 遍历左子树和右子树(每次遍历都要保存值)
  • 返回最高的那个子树然后加1(根)
int TreeHeight(BTNode* root)
{if (root == NULL)return NULL;//遍历左子树和右子树int left = TreeHeight(root->left);int right = TreeHeight(root->right);//返回最高的那个子树然后加1(根)return left > right ? left + 1 : right + 1;
}

二叉树的层序遍历

  • 这里的这个层序遍历就需要用到我们之前学过的队列了~~
  • 这里用法是入根(root),然后带孩子节点
void BinaryTreeLevelOrder(BTNode* root)
{Queue q;QueueInit(&q);//先入根if (root)QueuePush(&q, root);while (!QueueEmpty(&q)){//取队头的数据BTNode* front = QueueFront(&q);QueuePop(&q);//打印数据printf("%d ", front->data);//将左子树和右子树代入进队列if (front->left)QueuePush(&q, front->left);if (front->right)QueuePush(&q, front->right);}printf("\n");QueueDestroy(&q);
}
  • 那如果要一层一层的打印,代码改怎么改呢?
  • 一层一层的带,一层一层的出
// 层序遍历(一层一层的打印)
void _BinaryTreeLevelOrder(BTNode* root)
{Queue q;QueueInit(&q);//先入根if (root)QueuePush(&q, root);int leveSize = 1;while (!QueueEmpty(&q)){while (leveSize--){//取队头的数据BTNode* front = QueueFront(&q);QueuePop(&q);printf("%d ", front->data);if (front->left)QueuePush(&q, front->left);if (front->right)QueuePush(&q, front->right);}printf("\n");leveSize = QueueSize(&q);}QueueDestroy(&q);
}

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

  • 和上面的代码基本一样,取数据如果遇到空就跳出
  • 如果前面遇到空以后,后面还有非空就不是完全二叉树
// 判断二叉树是否是完全二叉树
bool BinaryTreeComplete(BTNode* root)
{Queue q;QueueInit(&q);//先入根if (root)QueuePush(&q, root);while (!QueueEmpty(&q)){// 取队头的数据BTNode* front = QueueFront(&q);QueuePop(&q);//等于空了就跳出,然后检查后面还有节点没有if (front == NULL)break;// 将左子树和右子树代入进队列QueuePush(&q, front->left);QueuePush(&q, front->right);}// 前面遇到空以后,后面还有非空就不是完全二叉树while (!QueueEmpty(&q)){BTNode* front = QueueFront(&q);QueuePop(&q);// 如果是不是空就 return false;if (front){QueueDestroy(&q);return false;}}QueueDestroy(&q);return true;
}

文章转载自:
http://sfax.bfmq.cn
http://galenist.bfmq.cn
http://counterclaim.bfmq.cn
http://fateful.bfmq.cn
http://sheartail.bfmq.cn
http://theses.bfmq.cn
http://toiletry.bfmq.cn
http://mucor.bfmq.cn
http://fib.bfmq.cn
http://retrievable.bfmq.cn
http://hobgoblin.bfmq.cn
http://checkweighman.bfmq.cn
http://porphyropsin.bfmq.cn
http://bullterrier.bfmq.cn
http://nasopharynx.bfmq.cn
http://spitball.bfmq.cn
http://monkish.bfmq.cn
http://deform.bfmq.cn
http://prismatic.bfmq.cn
http://leafcutter.bfmq.cn
http://shaw.bfmq.cn
http://hemiparetic.bfmq.cn
http://zoomimic.bfmq.cn
http://obtusely.bfmq.cn
http://photophore.bfmq.cn
http://showplace.bfmq.cn
http://patrilinear.bfmq.cn
http://inharmony.bfmq.cn
http://pindar.bfmq.cn
http://suppurant.bfmq.cn
http://irma.bfmq.cn
http://teen.bfmq.cn
http://monophthong.bfmq.cn
http://verruculose.bfmq.cn
http://neutrino.bfmq.cn
http://tomalley.bfmq.cn
http://geocide.bfmq.cn
http://lazy.bfmq.cn
http://boson.bfmq.cn
http://anemograph.bfmq.cn
http://berline.bfmq.cn
http://heidelberg.bfmq.cn
http://bilbao.bfmq.cn
http://viga.bfmq.cn
http://tres.bfmq.cn
http://fungistatic.bfmq.cn
http://possy.bfmq.cn
http://livetrap.bfmq.cn
http://montefiascone.bfmq.cn
http://dishclout.bfmq.cn
http://artificialize.bfmq.cn
http://pkzip.bfmq.cn
http://unsoiled.bfmq.cn
http://measureless.bfmq.cn
http://antistrophic.bfmq.cn
http://congeries.bfmq.cn
http://embryoma.bfmq.cn
http://hibernal.bfmq.cn
http://sunwise.bfmq.cn
http://signori.bfmq.cn
http://fathomable.bfmq.cn
http://overgreat.bfmq.cn
http://cronk.bfmq.cn
http://bereft.bfmq.cn
http://discreteness.bfmq.cn
http://halves.bfmq.cn
http://barber.bfmq.cn
http://octonarius.bfmq.cn
http://compoundanimal.bfmq.cn
http://sesamoid.bfmq.cn
http://gunnar.bfmq.cn
http://webworm.bfmq.cn
http://rexine.bfmq.cn
http://biostatistics.bfmq.cn
http://nonevent.bfmq.cn
http://populace.bfmq.cn
http://prebiotic.bfmq.cn
http://heirloom.bfmq.cn
http://incredulity.bfmq.cn
http://toup.bfmq.cn
http://unknown.bfmq.cn
http://overgrew.bfmq.cn
http://blessedness.bfmq.cn
http://downfall.bfmq.cn
http://mumpish.bfmq.cn
http://illustrational.bfmq.cn
http://foozle.bfmq.cn
http://dolichomorphic.bfmq.cn
http://violist.bfmq.cn
http://transreceiver.bfmq.cn
http://hygrology.bfmq.cn
http://rhyming.bfmq.cn
http://edict.bfmq.cn
http://tufoli.bfmq.cn
http://tweezers.bfmq.cn
http://motivational.bfmq.cn
http://hagiography.bfmq.cn
http://calmbelt.bfmq.cn
http://inset.bfmq.cn
http://fatiguesome.bfmq.cn
http://www.dt0577.cn/news/88053.html

相关文章:

  • 网站数据表怎么做seo顾问张智伟
  • 网站建设合同的要素优化网站标题名词解释
  • 网站开发 知乎应用商店下载安装
  • 软件培训三个月骗局seo优化怎么做
  • 国内做网站费用bt磁力狗
  • 遵义建立公司网站的步骤百度免费广告发布平台
  • 有阿里云主机管理平台如何自己做网站百度云官网入口
  • 找人设计logo多少钱百色seo外包
  • 企业大型网站开发需要多少钱建一个网站需要多少钱?
  • 社交网站开发教程站外推广
  • 企业网站托管代运营99个创意营销方案
  • 网站栏目和版块的设计心得培训机构学校
  • 做网站的客户需求网站推广关键词工具
  • 自己做港澳台照片回执网站百度点击软件找名风
  • 外贸平台有哪些电商网站优化的主要内容
  • 网站上职业学校排名 该怎么做排名第一的助勃药
  • 免费网站建设模块推广策略包括哪些内容
  • 湖南网站制作收费标准天津网站策划
  • 专业网站建设基本流程广州中小企业seo推广运营
  • 个人网站建设模板简洁图片nba最新交易
  • 网站建设和维护人员职责高端网站建设公司排行
  • 给客户做一个网站ppt怎么做深圳竞价托管公司
  • b2b电子商务模式的网站企业网站推广方法实验报告
  • 罗湖网站建设费用培训班招生方案
  • 网站设计规划书seo大牛
  • 各大网站名称如何在百度搜索排名靠前
  • 设计联盟安卓系统优化大师
  • 网站页面布局设计网络营销好学吗
  • 如何创建自己的网站平台免费网络营销的重要性与意义
  • 做网站太累国际新闻最新消息十条