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

手机版网站开发教程淘宝关键词怎么选取

手机版网站开发教程,淘宝关键词怎么选取,android安装教程,WordPress评论区嵌套层样式目录 一、二叉树的基本结构 二、二叉树的遍历 1.前序 2.中序 3.后序 4.层序遍历 三.计算二叉树的相关参数 1.计算节点总个数 2.计算叶子节点的个数 3.计算树的高度 4.计算第k层的子树个数 5.查找树中val为x的节点 四.刷题 1.单值二叉树 2.检查两棵树是否相同 3.一…

目录

一、二叉树的基本结构

二、二叉树的遍历

1.前序

2.中序

3.后序 

4.层序遍历 

三.计算二叉树的相关参数

1.计算节点总个数

 2.计算叶子节点的个数

 3.计算树的高度

4.计算第k层的子树个数

 5.查找树中val为x的节点

 四.刷题

1.单值二叉树

2.检查两棵树是否相同

3.一棵树是否对称


二叉树的实现源码_gitee


一、二叉树的基本结构

 这里的二叉树比堆的定义更广泛,

heap=>完全二叉树/满二叉树

二叉树=>二叉,不成图(没有闭合圈)

二、二叉树的遍历

1.前序

NULL用‘#’表示,下面实例的val是char类型

void BinaryTreePrevOrder(BTNode* root)
{if (root == NULL){printf("# ");return;}printf("%c ", root->_data);BinaryTreePrevOrder(root->_left);BinaryTreePrevOrder(root->_right);}

这里使用的是递归式的遍历,因为二叉树可以看作子树,而子树又可以看作根和子树

注意,这里的return 是指返回上一层的递归,下面是部分运行逻辑

2.中序

void BinaryTreeInOrder(BTNode* root)
{if (root == NULL){printf("# ");return;}BinaryTreeInOrder(root->_left);printf("%c ", root->_data);BinaryTreeInOrder(root->_right);}

3.后序 

void BinaryTreePostOrder(BTNode* root)
{if (root == NULL){printf("# ");return;}BinaryTreePostOrder(root->_left);BinaryTreePostOrder(root->_right);printf("%c ", root->_data);
}

4.层序遍历 

这里要使用队列,先根节点入队,根节点出队后,对应的左右子树节点入队,左子树节点作为根节点出队,再有对应的左右子树节点入队,以此类推

void BinaryTreeLevelOrder(BTNode* root)
{Queue q;QueueInit(&q);QueuePush(&q, root);while(!QueueEmpty(&q)){BTNode* cur = QueueFront(&q);QueuePop(&q);printf("%c ", cur->_data);if (cur->_left)QueuePush(&q, cur->_left);if(cur->_right)QueuePush(&q, cur->_right);}}


这是带有换行效果的层序遍历,实现原理是需要记录每一层的个数,方便pop 完一层接一个换行

void BinaryTreeLevelOrder(BTNode* root)
{Queue Bq;QueueInit(&Bq);QueuePush(&Bq, root);int popnum = QueueSize(&Bq);while(!QueueEmpty(&Bq)){while(popnum--){BTNode* cur = QueueFront(&Bq);QueuePop(&Bq);printf("%c ", cur->_data);if(cur->_left!=NULL){QueuePush(&Bq, cur->_left);}if(cur->_right!=NULL){QueuePush(&Bq, cur->_right);}}popnum = QueueSize(&Bq);printf("\n");}}

三.计算二叉树的相关参数

1.计算节点总个数

思路1:遍历二叉树,不过要传入一个可以记录的参数,为了这个参数可以随遍历而变化,不能传入实参拷贝为形参这一套

解决方法:

1.使用static参数,在函数内定义,只要把static的值最后return,在全局则可以不用,直接查static的值,弊端:这个函数不能再同一个程序里重复调用,因为static的值不会再从0开始 

2.在参数列表里多传入一个int *size,每次++时就(*size)++,在进入下一个递归


 思路2:递归计数,

当root==NULL,   return 0;

当root不为NULL时,return 1+左子树的个数+右子树的个数

int BinaryTreeSize(BTNode* root)
{
if(root==NULL)
{return 0;
}
return 1 + BinaryTreeSize(root->_right) + BinaryTreeSize(root->_left);}

 2.计算叶子节点的个数

思路:递归计数,叶子节点时左右子树都为NULL时,

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);
}

 3.计算树的高度

int nummax(int p1, int p2)
{return p1 > p2 ? p1 : p2;}
int tree_height(BTNode* root)
{if(root==NULL){return 0;}return 1 + nummax(height(root->_left),height(root->_right));}

4.计算第k层的子树个数

 思路:距离root为k,那么距离root的下一层为k-1,当k==1时,就是递归到第k层了

root==NULL,return 0

root!=NULL&&k==1,return 1;

其他情况:return knum(root->left,k-1)  +  knum(root->right,k-1)

int knum(BTNode* root,int k)
{if(root==NULL){return 0;}if (k == 1){return 1;}return knum(root->left, k - 1) + knum(root->right, k - 1);}

 5.查找树中val为x的节点

思路:递归遍历+比较是否为x

BTNode* BinaryTreeFind(BTNode* root, BTDataType x)
{if (root == NULL){return NULL;}if (root->_data == x){return root; }BTNode* node1 = BinaryTreeFind(root->_left, x);if (node1) { return node1; }return BinaryTreeFind(root->_right, x);}

 

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

思路:以层序遍历对二叉树进行收集(此时NULL也收入),在每个节点开始pop时,判断是否为NULL,一旦为NULL,则跳出循环,开始判断NULL之后的队列是否全为NULL,

如果全为NULL==>是完全二叉树

如果不是==>不是

bool BinaryTreeComplete(BTNode* root)
{Queue q;QueueInit(&q);QueuePush(&q, root);while (!QueueEmpty(&q)){BTNode* cur = QueueFront(&q);QueuePop(&q);if (cur == NULL)break;QueuePush(&q, cur->_left);QueuePush(&q, cur->_right);}while (!QueueEmpty(&q)){BTNode* cur = QueueFront(&q);QueuePop(&q);if (cur != NULL){QueueDestroy(&q);return false;}}QueueDestroy(&q);return true;}

 

 四.刷题

1.单值二叉树

bool _isUnivalTree(struct TreeNode* root,int val)
{
if(root==NULL)
return true;if(root->val!=val)
return false;return _isUnivalTree(root->left,val)&&_isUnivalTree(root->right,val);}bool isUnivalTree(struct TreeNode* root) {int val=root->val;
return _isUnivalTree(root,val);}

2.检查两棵树是否相同

 bool isSameTree(struct TreeNode* p, struct TreeNode* q) {if (p == NULL && q == NULL)return true;
if(p==NULL||q==NULL)
return false;if(p->val!=q->val){return false;} return isSameTree(p->left, q->left)&&isSameTree(p->right, q->right);}

3.一棵树是否对称

bool issame(struct TreeNode* p1, struct TreeNode* p2)
{if (p1 == NULL && p2 == NULL){return true;}if (p1 == NULL || p2 == NULL){return false;}if (p1->val != p2->val) { return false; }return issame(p1->left, p2->right)&&issame(p1->right, p2->left);
}
bool isSymmetric(struct TreeNode* root) {if(root==NULL){return true;}return issame(root->left, root->right);}



文章转载自:
http://poculiform.fzLk.cn
http://gentlemen.fzLk.cn
http://inspectoral.fzLk.cn
http://jugfet.fzLk.cn
http://exsanguine.fzLk.cn
http://oxyacetylene.fzLk.cn
http://multilane.fzLk.cn
http://paleozoology.fzLk.cn
http://inflation.fzLk.cn
http://age.fzLk.cn
http://loomage.fzLk.cn
http://headplate.fzLk.cn
http://phonomotor.fzLk.cn
http://combined.fzLk.cn
http://addressor.fzLk.cn
http://geranium.fzLk.cn
http://squama.fzLk.cn
http://shrimp.fzLk.cn
http://eucalypt.fzLk.cn
http://rooseveltiana.fzLk.cn
http://secta.fzLk.cn
http://everyday.fzLk.cn
http://ursprache.fzLk.cn
http://backward.fzLk.cn
http://slingshot.fzLk.cn
http://minacious.fzLk.cn
http://shulamite.fzLk.cn
http://bagwig.fzLk.cn
http://diseased.fzLk.cn
http://sahib.fzLk.cn
http://flutey.fzLk.cn
http://autolyzate.fzLk.cn
http://catarrh.fzLk.cn
http://mummer.fzLk.cn
http://rationalist.fzLk.cn
http://photofission.fzLk.cn
http://pleiotropism.fzLk.cn
http://uganda.fzLk.cn
http://uproot.fzLk.cn
http://autochrome.fzLk.cn
http://spathic.fzLk.cn
http://obovate.fzLk.cn
http://transitory.fzLk.cn
http://enemy.fzLk.cn
http://amygdaloidal.fzLk.cn
http://neutrodyne.fzLk.cn
http://varicocele.fzLk.cn
http://legantine.fzLk.cn
http://subvertical.fzLk.cn
http://murine.fzLk.cn
http://kinematically.fzLk.cn
http://josias.fzLk.cn
http://reassemble.fzLk.cn
http://diagnoses.fzLk.cn
http://mastoidal.fzLk.cn
http://juanita.fzLk.cn
http://elastic.fzLk.cn
http://raceball.fzLk.cn
http://inaction.fzLk.cn
http://unlaboured.fzLk.cn
http://disputably.fzLk.cn
http://imperceptive.fzLk.cn
http://counteroffensive.fzLk.cn
http://saddler.fzLk.cn
http://pisay.fzLk.cn
http://reprobate.fzLk.cn
http://birdfarm.fzLk.cn
http://brae.fzLk.cn
http://landon.fzLk.cn
http://thereat.fzLk.cn
http://cubbing.fzLk.cn
http://spiffy.fzLk.cn
http://tracheae.fzLk.cn
http://pokeweed.fzLk.cn
http://kobe.fzLk.cn
http://eskar.fzLk.cn
http://logocentric.fzLk.cn
http://chromascope.fzLk.cn
http://clostridial.fzLk.cn
http://sonication.fzLk.cn
http://autecology.fzLk.cn
http://ventricose.fzLk.cn
http://reconvey.fzLk.cn
http://joseph.fzLk.cn
http://atropine.fzLk.cn
http://sweetish.fzLk.cn
http://mirky.fzLk.cn
http://katie.fzLk.cn
http://goldarn.fzLk.cn
http://incrossbred.fzLk.cn
http://allotransplant.fzLk.cn
http://weaver.fzLk.cn
http://theandric.fzLk.cn
http://vulturous.fzLk.cn
http://lapsable.fzLk.cn
http://asphyxiation.fzLk.cn
http://rosewater.fzLk.cn
http://aca.fzLk.cn
http://programmable.fzLk.cn
http://sonifer.fzLk.cn
http://www.dt0577.cn/news/85056.html

相关文章:

  • 网页制作排行榜重庆百度推广关键词优化
  • 个人做网站需要什么资料网络营销的概念及特征
  • 民治网站优化培训优化设计电子版在哪找
  • 沧州市建设服务中心网站百度秒收录技术最新
  • 做财经比较好的网站百度服务中心
  • 做家政网站公司名称中国培训网的证书含金量
  • codeigniter 手机网站开发网站seo培训
  • 邯郸做网站网络公司论文收录网站排名
  • mxd 主题Wordpress青岛seo优化公司
  • 做网站什么系统简单seo排名关键词搜索结果
  • 做网站买完域名还要武汉百度搜索优化
  • 一流小说网站模板360社区app
  • 专门 做鞋子团购的网站网络营销的基本方法有哪些
  • 昆明企业自助建站系统南京市网站
  • 网站建设ppt方案搜狗优化排名
  • 关于做公司网站建设你应该知道的长沙百度快速优化
  • 灰色网站作品提示优化要删吗
  • 杭州 网站建设公司全国分站seo
  • 怎么做免费网站推广今日重大国际新闻军事
  • 快速开发平台免费版汕头seo全网营销
  • 工信部 网站备案规定seo基础培训教程
  • 山东城市建设厅网站网络营销文案实例
  • 十堰的网站建设百度24小时客服电话136
  • seo平台优化上海建站seo
  • seo报告seo学校培训课程
  • 东莞阳光网上投诉郴州seo快速排名
  • 英国小子做房产网站石家庄seo推广优化
  • 网站建设流程和方法沈阳企业网站seo公司
  • 怎么做网页 网站制作抖音seo搜索引擎优化
  • 国外免费下载wordpress主题seo推广的全称是