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

网站建设公司河南郑州青岛百度网站排名优化

网站建设公司河南郑州,青岛百度网站排名优化,国外机械做的好的网站,电影网站做淘客#上一章我们把搜索二叉树的知识给传授完毕,如果认真的看下去并且手打了几遍,基本上内部的逻辑还是可以理解的,那我们现在就截至继续学习树的一些重要知识啦~~ 树高怎么求呀?如果用上一次学的层次遍历来求树高,有点小题…

#上一章我们把搜索二叉树的知识给传授完毕,如果认真的看下去并且手打了几遍,基本上内部的逻辑还是可以理解的,那我们现在就截至继续学习树的一些重要知识啦~~

树高怎么求呀?如果用上一次学的层次遍历来求树高,有点小题大做了,这章我们就教大家如何用递归来求树高。

如何查找树里的元素呢??

哈夫曼树是个啥子??

在这一章节我都会很细致的给大家说明啦~

树高咋求???

🤔我们现在掌握的方法只有层次遍历来求树高,那我们怎么用递归来求树高呢???

我们现在先拿最极端情况来说明,如果一棵树没有一个元素,那我们的树高是不是为0,这样来看,我们的终止条件就找到啦!,没错就是当根节点为空的是后,我们就返回0;

我们的树高应该看最长的一部分,那我们就应该先定义两个高度,一个是左子树高度,另一个是右子树高度,之后我们比较左子树高度和右子树高度哪个高,哪个高哪个就决定了树高,因为左子树和右子树都是从第二层开始才有的,所以我们最后返回的树高应该让左右子树+1。

这样来看我们大概的逻辑不就出来了嘛?

先写一个极端判断条件,然后比较左右子树高度即可。

int treeheight(treenode* root)
{if(root==NULL)return 0;int lh=treeheight(root->lchild);int rh=treeheight(root->rchild);return lh>rh?lh+1:rh+1; 
}

这样看来是不是还挺简单嘞,嘿嘿。

那我们接着来下面的知识,如何查找元素嘞?

怎么查找树里面的元素???

查找的话,我们大概想一下就知道要用bool函数来判断啦,在这个结构中,我们首先要把根节点和查找的元素定义起来。

我们怎么查找呢?肯定也是一层一层查找,如果一棵树都查完了也没找的这个元素,那我们就可以说这棵树没有这个元素。

由此我们可以得到我们判断结束的条件,当树不为空时候,我们就循环;如果为空,我们就结束判断。

代码部分也是很简单,如下:
 

bool find(treenode* root,int target)
{while(root){if(root->value==target)return 1;if(root->value<target)root=root->lchild;if(root->value>target)root=root->rchild;}
}

由以上内容,和之前的文章,我们现在掌握了如何构建查找二叉树,如何前中后序遍历,如何层次遍历,如何求树高,如何查找元素,二叉树中基本的知识,我们大概已经学完啦,下面我们来认识一个重要的树,哈夫曼树。

哈夫曼树

定义:

我们首先了解哈夫曼树的定义:

对于哈夫曼树,我们的权值只有叶子结点!!

性质:

1.权值越大的叶子节点越靠近根节点

2.权值越小的叶子节点越远离根节点

3.哈夫曼树并不唯一

4.哈夫曼树的子树也是哈夫曼树

5.哈夫曼树无度为1的结点

这些性质也是比较好看出来的,在这里就不多余赘述啦~

哈夫曼树的构建:

结点的不同:

在我们构建搜索二叉树时候,我们初始将左右子树设置为空,但是在我们的哈夫曼树的初始化时,我们应该将左右子树保留。

如下:

struct treenode{int weight;treenode* lchild;treenode* rchild;treenode(int v,treenode* l,treenode* r){weight=v,lchild=l,rchild=r;}
};

因为我们左右孩子会构造出来我们的根节点,所以左右孩子这里不为空。

构建过程:

1.我们首先要把每个节点初始化,之后push进我们的vector里面

2.定义左孩子,右孩子,根节点三个变量

3.对元素进行降序排列,之后再弹出最后两个元素,同时利用最后两个元素构建出我们的父节点。

(此时的父节点需要new来开辟空间)

过程也相对容易,接下来是代码部分:

void build(vector<int> a){vector<treenode*>b;for(int i=0;i<a.size();i++){treenode* tmp=new treenode(a[i],NULL,NULL);b.push_back(tmp);}treenode* l=NULL,*r=NULL,*p=NULL;while(b.size()>1){sort(b.begin(),b.end(),[=](treenode* a,treendoe* b){return a->weight>b.weight;});l=b[b.size()-1];b.pop_back();r=b[b.size()-1];b.pop_back();p=new treenode(l->weight+r->weight,l,r);}return p;
}

求WPL

怎么求wpl呢?这里就用到了我们之前学的层次遍历啦。

我们首先层次遍历,判断结点是否没有左右孩子,这样就能找到我们的叶子节点,然后乘以我们的层次-1,如此加和进去就可以得到我们的wpl啦

void layersearch(treenode* root)
{queue<treenode*>q;q.push(root);treenode* last=root;treenode* nlast=NULL;while(!q.empty()){treenode* tmp=q.front();cout<<tmp->weight;if(tmp->lchild==NULL&&tmp->rchild==NULL){wpl+=tmp->weight*L;}q.pop();if(tmp->lchild==NULL){q.push(tmp->lchild);nlast=tmp->lchild;}if(tmp->rchild==NULL){q.push(tmp->rchild);nlast=tmp->rchild;}if(tmp==last){cout<<endl;L++;last=nlast;}}}

//以上就是我们树里面残留的问题啦,一些基本的原理和代码部分我都有提到,在这里还得看大家自己下去的实践能力,多打代码,才能更透彻的了解,理解底层逻辑。

如果我的文章对对大家有帮助的作用,希望大家多多支持哦~~(谢谢大家的点赞关注啦~)

阿里嘎多everybody~

http://www.dtcms.com/wzjs/402360.html

相关文章:

  • 怎么自己做刷qq网站职业培训网
  • 专业简历制作网站有哪些seo团队管理系统
  • 大芬网站建设站长工具外链查询
  • 财务公司网站模板网站制作哪家公司好
  • 怎么做企业网站建设方案品牌营销策划培训课程
  • 沧州哪里有做网站的公司4000-seo助手
  • 门户网站建设意义常见的网络营销方式
  • 唐山网站怎么做seo什么平台可以发广告引流
  • 做网站项目需要多少钱谷歌是如何运营的
  • appmakr教程海淀区seo引擎优化多少钱
  • 给网站写文章怎么做百度打车客服电话
  • 地方网站定位佛山外贸seo
  • 什么网站可以做音乐伴奏金戈枸橼酸西地那非
  • 深圳html5网站建设百度广告运营
  • 淮安网站建设费用推广优化工具
  • html网站后台管理系统网址链接查询
  • 制作网站服务器营销推广方案怎么写
  • 运城环保局网站王建设站内优化seo
  • 网站宣传与推广的指导思想个人网站制作软件
  • 游戏网站做代理seo搜索引擎优化工作内容
  • 做购物网站多少钱百度app打开
  • 炫酷的网站设计搜索引擎调价平台哪个好
  • 温州公司网站建设2022最近热点事件及评述
  • 如何自己做解析网站百度定位店铺位置怎么设置
  • 网站建设专业的公司排名2023年10月疫情恢复
  • 湛江高端网站建设百度广告投放公司
  • 重庆网站建设选卓光网络营销热点事件案例分析
  • 湖州网站设计建设网站开发需要哪些技术
  • 司机找事做那个网站靠谱徐州seo排名收费
  • 百度上传网站服务器怎么做游戏推广员