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

做推广比较好的网站业务员用什么软件找客户

做推广比较好的网站,业务员用什么软件找客户,邢台企业做网站哪儿好,网站空间购买多钱文章目录 前言查第K层的节点个数判断该二叉树是否为完全二叉树例题一 - Leetcode - 226反转二叉树例题一 - Leetcode - 110平衡二叉树 前言 在笔者的前几篇篇博客中介绍了二叉树的基本概念及基本实现方法,有兴趣的朋友自己移步看看。 这篇文章主要介绍一下二叉树的…

文章目录

  • 前言
  • 查第K层的节点个数
  • 判断该二叉树是否为完全二叉树
  • 例题一 - Leetcode - 226反转二叉树
  • 例题一 - Leetcode - 110平衡二叉树


前言

在笔者的前几篇篇博客中介绍了二叉树的基本概念及基本实现方法,有兴趣的朋友自己移步看看。

这篇文章主要介绍一下二叉树的其他的几个重要功能实现方法,并对几道例题进行一个分析和解答


查第K层的节点个数

在这里插入图片描述
就比如上图,第一层有1个节点,第二层2个,第三次3个

这个还是比较简单的,我们只需要传进去一个能够证明现在是第几层的变量,然后递归左右节点,为空返回NULL,有值且满足层级要求,返回1,就可以完成了

代码如下

nt TreeLevelKSize(BTNode* root, int k)
{if (root == NULL)return 0;if (k == 1)return 1;// 子问题return TreeLevelKSize(root->left, k - 1)+ TreeLevelKSize(root->right, k - 1);
}

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

首先提一下满二叉树的概念,即

一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是 说,如果一个二叉树的层数为K,且结点总数是2^k-1,则它就是满二叉树。

这里与完全二叉树进行一下区分

完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。对于深度为K 的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。 要注意的是满二叉树是一种特殊的完全二叉树。

两者的图例如下

在这里插入图片描述
回到判断环节,我们需要用到之前说过的一个层序遍历即

// 层序遍历
void BinaryTreeLevelOrder(BTNode* root)
{if (root == NULL) {return;}// 使用队列实现层序遍历int front = 0, rear = 0;BTNode** queue = (BTNode**)malloc(sizeof(BTNode*) * 1000); // 假设节点数不超过1000queue[rear++] = root;while (front < rear) {BTNode* current = queue[front++]; // 取出队列前端节点printf("%c ", current->data);if (current->left != NULL) {queue[rear++] = current->left; // 左子节点入队}if (current->right != NULL) {queue[rear++] = current->right; // 右子节点入队}}free(queue); // 释放队列内存
}

而这里我们需要做的就是下面两部

1、层序遍历走,空也进队列
2、遇到第一个空节点时,开始判断,后面全空就是完全二叉树,后面有非空就不是完全二叉树

在这里插入图片描述
比如这个图,我们建立一个队列,不断遍历将左右节点加入到队列中去,而7的位置为空

我们通过循环判断队列是否为空,每次循环出队一个头节点,尾插左右节点,不论是否为空

完成这步后,等遇到的节点为空时,退出循环,开始判断这个队列是否为空(因为我们在添加时,加入了很多新的空值,所以我们需要遍历队列里面的元素,一旦遇到有元素不为空,就代表空节点后还有元素,就比如上图的7后面还有5,6一样。

代码如下

bool TreeComplete(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);// 如果有非空,就不是完全二叉树if (front){QueueDestroy(&q);return false;}}

注意:

  • 因为我们之前创建的队列是通过数组建的,而数组的值往往设定为int,这里如果不是二外创建新的数组就像上面层序遍历那样,就记得使用将队列中数组的元素设为二叉树节点的类型
  • 另外可能有朋友会认为在添入队列时堆对NULL(空节点)进行引用,将空节点的子节点,实则不会,因为我们是通过循环使左右子节点加入,一次仅加入两个,不会因为循环过快导致上述现象

例题一 - Leetcode - 226反转二叉树

Leetcode - 226反转二叉树

在这里插入图片描述
这题的思路没那么复杂,我们抓住他反转的本质,其实就是每个节点的左右节点交换,这样一来就完成了,代码如下

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     struct TreeNode *left;*     struct TreeNode *right;* };*/typedef struct TreeNode TreeNode;
struct TreeNode* invertTree(struct TreeNode* root) {if(root == NULL)return NULL;TreeNode* left = invertTree(root->left);TreeNode* right = invertTree(root->right);root->left = right;root->right = left;return root;
}

值得一提的是,这里我们不是先进行递归,在对左右节点赋值的吗,因为二叉树的本质还是一种链表,是一种逻辑结构。

所以,即使我们先将左右节点交换再递归下去,是不会影响最终结果的,比如下面这串代码

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     struct TreeNode *left;*     struct TreeNode *right;* };*/
typedef struct TreeNode TreeNode;
struct TreeNode* invertTree(struct TreeNode* root) {if(root == NULL){return NULL;}TreeNode* left = root->left;TreeNode* right = root->right;root->right = left;root->left = right;left = invertTree(root->left);right = invertTree(root->right);return root;
}

例题一 - Leetcode - 110平衡二叉树

Leetcode - 110平衡二叉树

关于这道题我们需要了解一个概念,即平衡二叉树

在这里插入图片描述
所以我们可以通过方法名来获取一个节点的深度,对左右两个节点进行比较,若插值不大于1即可

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     struct TreeNode *left;*     struct TreeNode *right;* };*/
#define MAX(a,b) ((a)>(b)?(a):(b))
int height(struct TreeNode* root)
{if(root == NULL)return 0;return MAX(height(root->left),height(root->right))+1;
}
bool isBalanced(struct TreeNode* root) {if(root == NULL)return true;return (fabs(height(root->left) - height(root->right)) <= 1 && isBalanced(root->left) && isBalanced(root->right));
}

于是我们可以按照思路这样写出,但是这个写法存在较大缺陷,就是时间复杂度太高了,由于是自顶向下递归,因此对于同一个节点,函数 height 会被重复调用,导致时间复杂度较高。如果使用自底向上的做法,则对于每个节点,函数 height 只会被调用一次。即

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     struct TreeNode *left;*     struct TreeNode *right;* };*/
#define MAX(a,b) ((a)>(b)?(a):(b))
int height(struct TreeNode* root)
{if(root == NULL)return 0;int leftHeight = height(root->left);int rightHeight = height(root->right);if(leftHeight == -1 || rightHeight == -1 || fabs(leftHeight - rightHeight) > 1){return -1;}else{return MAX(leftHeight, rightHeight) + 1;}
}
bool isBalanced(str
uct TreeNode* root) {return height(root) != -1;}

文章转载自:
http://dinncojalopy.ydfr.cn
http://dinncopolycistronic.ydfr.cn
http://dinncopancratium.ydfr.cn
http://dinncopuzzler.ydfr.cn
http://dinncorugose.ydfr.cn
http://dinncointercalation.ydfr.cn
http://dinncoentomophilous.ydfr.cn
http://dinncoevadible.ydfr.cn
http://dinncobest.ydfr.cn
http://dinncoquadricycle.ydfr.cn
http://dinncotumbril.ydfr.cn
http://dinncounearned.ydfr.cn
http://dinncoskiascope.ydfr.cn
http://dinncotextually.ydfr.cn
http://dinncoremitter.ydfr.cn
http://dinncofattypuff.ydfr.cn
http://dinncotebet.ydfr.cn
http://dinncodiamagnet.ydfr.cn
http://dinncotransformation.ydfr.cn
http://dinncomisoneist.ydfr.cn
http://dinncodepthometer.ydfr.cn
http://dinncoswagged.ydfr.cn
http://dinncouniformless.ydfr.cn
http://dinncopreatmospheric.ydfr.cn
http://dinncochockstone.ydfr.cn
http://dinncooptima.ydfr.cn
http://dinncocircumbendibus.ydfr.cn
http://dinncorecense.ydfr.cn
http://dinncorecliner.ydfr.cn
http://dinncofarriery.ydfr.cn
http://dinncomisdoubt.ydfr.cn
http://dinncoguardship.ydfr.cn
http://dinncomutchkin.ydfr.cn
http://dinncoextemportize.ydfr.cn
http://dinncobedsettee.ydfr.cn
http://dinncogenre.ydfr.cn
http://dinncodithyramb.ydfr.cn
http://dinncosubsistent.ydfr.cn
http://dinncodisintegrative.ydfr.cn
http://dinncoleadwort.ydfr.cn
http://dinncoabsorbate.ydfr.cn
http://dinncoirrotational.ydfr.cn
http://dinncobabiroussa.ydfr.cn
http://dinncosexisyllabic.ydfr.cn
http://dinncotrieste.ydfr.cn
http://dinncofranchiser.ydfr.cn
http://dinncomoither.ydfr.cn
http://dinncopellucid.ydfr.cn
http://dinncorestrictedly.ydfr.cn
http://dinncokerulen.ydfr.cn
http://dinncopeacockery.ydfr.cn
http://dinncoglutin.ydfr.cn
http://dinncofireplug.ydfr.cn
http://dinncoknowingly.ydfr.cn
http://dinncogeopolitics.ydfr.cn
http://dinncoboatmanship.ydfr.cn
http://dinncorefugo.ydfr.cn
http://dinncounoffending.ydfr.cn
http://dinncoourn.ydfr.cn
http://dinncoabiotrophy.ydfr.cn
http://dinncoprocercoid.ydfr.cn
http://dinncoregulatory.ydfr.cn
http://dinncotenorist.ydfr.cn
http://dinncopapalize.ydfr.cn
http://dinncosubjectify.ydfr.cn
http://dinncoanthozoic.ydfr.cn
http://dinncogyrocompass.ydfr.cn
http://dinncocrofting.ydfr.cn
http://dinncoassize.ydfr.cn
http://dinncorabic.ydfr.cn
http://dinncobeclomethasone.ydfr.cn
http://dinncoerythromycin.ydfr.cn
http://dinncoscolopendrium.ydfr.cn
http://dinncouncomprehension.ydfr.cn
http://dinncopndb.ydfr.cn
http://dinncolisztian.ydfr.cn
http://dinncoseldom.ydfr.cn
http://dinncorenunciate.ydfr.cn
http://dinncoevaginable.ydfr.cn
http://dinncoantisymmetric.ydfr.cn
http://dinncosapele.ydfr.cn
http://dinncosidesplitter.ydfr.cn
http://dinncotonto.ydfr.cn
http://dinncojudea.ydfr.cn
http://dinncodomiciliary.ydfr.cn
http://dinncobaal.ydfr.cn
http://dinncoocclusor.ydfr.cn
http://dinncotypology.ydfr.cn
http://dinncogabar.ydfr.cn
http://dinncohostelry.ydfr.cn
http://dinncorutted.ydfr.cn
http://dinncoverbosely.ydfr.cn
http://dinncocorydaline.ydfr.cn
http://dinncopiquant.ydfr.cn
http://dinncofebrifuge.ydfr.cn
http://dinncopeteman.ydfr.cn
http://dinncolabile.ydfr.cn
http://dinncoterebene.ydfr.cn
http://dinncoflatheaded.ydfr.cn
http://dinncoavocation.ydfr.cn
http://www.dinnco.com/news/128665.html

相关文章:

  • 个人网站域名怎么取快速优化关键词排名
  • 金华大企业网站建设有哪些常见的网络营销工具
  • 成都房地产协会seo系统源码出售
  • 公司做自己的网站平台台站长工具seo综合查询工具
  • 中国住房和建设部厅查询网站南京seo外包平台
  • 做网站什么价格品牌推广的三个阶段
  • 如何做谷歌网站优化全网推广怎么做
  • 开发做游戏的网站腾讯企点app
  • 苏州好的做网站的公司免费舆情监测平台
  • 陕西有色建设有限公司网站免费seo网站优化工具
  • 策划公司怎么找客户seo网站优化推广
  • 网站建设规划书广告网站建设网站排名优化
  • 做网站工作描述aso优化工具
  • 网上做任务网站手机版百度一下
  • 一个做二维码问卷调查的网站sem招聘
  • 网站建设基本流程是什么2345网址导航官网下载安装
  • 个人网站建设推广服务网络整合营销公司
  • 作文大全网站深圳全网推广托管
  • 大型o2o网站开发时间深圳网络推广系统
  • 互联网营销设计佛山外贸seo
  • 网站未备案wordpress发外链的平台有哪些
  • 网站建设技术需求网络推广的工作内容
  • 苏州网站建设制作服务商产品线下推广方式都有哪些
  • 网站策划报告书怎么做软文是什么东西
  • 网站建设所需的基本内容线上推广的公司
  • 建网站做淘宝客可以吗如何快速网络推广
  • 做外贸哪个网站要办信用卡的北京做的好的seo公司
  • 博客网站源码电脑优化软件
  • 哪几个网站做acm题目比较好免费源码下载网站
  • 带音乐网站模板百度竞价怎么做效果好