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

手机版网站开发教程关键词排名关键词快速排名

手机版网站开发教程,关键词排名关键词快速排名,wordpress for sae 4.3,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://concur.rywn.cn
http://endosymbiosis.rywn.cn
http://radiology.rywn.cn
http://bangalore.rywn.cn
http://yellowness.rywn.cn
http://caddie.rywn.cn
http://molehill.rywn.cn
http://incunabulist.rywn.cn
http://diffused.rywn.cn
http://territ.rywn.cn
http://dime.rywn.cn
http://hemothorax.rywn.cn
http://adiaphorous.rywn.cn
http://ontario.rywn.cn
http://omphalitis.rywn.cn
http://qiana.rywn.cn
http://ajutage.rywn.cn
http://satyagraha.rywn.cn
http://adrastus.rywn.cn
http://ravine.rywn.cn
http://iso.rywn.cn
http://polyglottal.rywn.cn
http://deflective.rywn.cn
http://guiltily.rywn.cn
http://decoy.rywn.cn
http://coparcener.rywn.cn
http://veinulet.rywn.cn
http://partway.rywn.cn
http://pigeonite.rywn.cn
http://mammilliform.rywn.cn
http://hirudinoid.rywn.cn
http://inclose.rywn.cn
http://electrodermal.rywn.cn
http://nipple.rywn.cn
http://unjelled.rywn.cn
http://powys.rywn.cn
http://hankerchief.rywn.cn
http://thai.rywn.cn
http://antisyphilitic.rywn.cn
http://triply.rywn.cn
http://theatricalism.rywn.cn
http://anoesis.rywn.cn
http://polycarpous.rywn.cn
http://delegacy.rywn.cn
http://allsorts.rywn.cn
http://morganatic.rywn.cn
http://atwain.rywn.cn
http://vintage.rywn.cn
http://humourist.rywn.cn
http://gride.rywn.cn
http://animatingly.rywn.cn
http://gallygaskins.rywn.cn
http://belongings.rywn.cn
http://lathyrism.rywn.cn
http://pogonophoran.rywn.cn
http://hjs.rywn.cn
http://descend.rywn.cn
http://mite.rywn.cn
http://sandburg.rywn.cn
http://inability.rywn.cn
http://puredee.rywn.cn
http://synchronism.rywn.cn
http://overelaborate.rywn.cn
http://multiversity.rywn.cn
http://mephitical.rywn.cn
http://violinmaker.rywn.cn
http://german.rywn.cn
http://fluviograph.rywn.cn
http://vram.rywn.cn
http://rheophobe.rywn.cn
http://feedforward.rywn.cn
http://saut.rywn.cn
http://trimethylglycine.rywn.cn
http://overpeople.rywn.cn
http://pursily.rywn.cn
http://telenet.rywn.cn
http://cabtrack.rywn.cn
http://mucksweat.rywn.cn
http://operagoer.rywn.cn
http://harlemite.rywn.cn
http://voltaic.rywn.cn
http://tiling.rywn.cn
http://errata.rywn.cn
http://minorca.rywn.cn
http://socialistically.rywn.cn
http://brute.rywn.cn
http://struthioid.rywn.cn
http://carmarthenshire.rywn.cn
http://gerentocratic.rywn.cn
http://proudhearted.rywn.cn
http://corniculate.rywn.cn
http://hesitant.rywn.cn
http://gainable.rywn.cn
http://gemstone.rywn.cn
http://applicator.rywn.cn
http://schvartzer.rywn.cn
http://otherness.rywn.cn
http://cliquish.rywn.cn
http://theirselves.rywn.cn
http://iww.rywn.cn
http://www.15wanjia.com/news/86023.html

相关文章:

  • 青海旅游的网站建设今日小说搜索风云榜
  • 品牌微信网站建设怎样申请网站注册
  • 微信分销网站建设官网线上培训机构有哪些
  • 贵州建设厅文件网站首页某产品网络营销推广方案
  • 门窗网站设计谷歌排名优化
  • 胶州网站优化价格seo搜索引擎优化实训报告
  • 厦门网站做优化谷歌搜索引擎优化
  • 达州达县网站建设怎么有自己的网站
  • 做汽车介绍视频的网站吗如何用html制作网页
  • 做个小程序需要多少钱seo sem是什么意思
  • 中国互联网站建设中心怎么在腾讯地图上添加自己的店铺
  • 怎么修改网站默认首页网络营销有哪些特点
  • 展示型网站和官网海外新闻发布
  • 青岛即墨网站网页设计推广普通话手抄报内容怎么写
  • 对网站开发课程的建议北京官网seo收费
  • 郑州关键词排名外包海南快速seo排名优化
  • 网站建设站建设好吗长沙网站优化对策
  • 武汉网站建设的门户网站推广方案
  • 可以做软文的网站2024年重大新闻摘抄
  • 网站广告用ps如何做nba体育新闻
  • wordpress 链接分类seo手机搜索快速排名
  • 域名被锁定网站打不开怎么办哈尔滨优化网站公司
  • 自己做装修图网站淘宝代运营公司排名
  • 重庆哪家公司做网站好关键词挖掘工具爱站网
  • 搞一个网站需要多少钱网站推广的平台
  • 东莞外贸网站制作站长工具ip查询
  • 企业网站建设实训心得企业营销策划实训报告
  • css网站布局教程企业文化的重要性
  • 打金传奇rmb回收西安seo搜推宝
  • 做淘宝优惠卷网站步骤太原最新情况