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

北京网站建设 云智互联成品短视频软件大全下载手机版

北京网站建设 云智互联,成品短视频软件大全下载手机版,做网站需要软件,做一元云购网站文章目录前言一、求二叉树节点个数二、求树的叶子结点个数三、求树的高度四、二叉树查找值为x的结点总结前言 笔者整理出了一些关于萌新在入门二叉树时容易犯的一些错误,你也来试试自己会不会掉到这些坑里把~ 一、求二叉树节点个数 错误示例: int Tre…

文章目录

  • 前言
  • 一、求二叉树节点个数
  • 二、求树的叶子结点个数
  • 三、求树的高度
  • 四、二叉树查找值为x的结点
  • 总结


前言

笔者整理出了一些关于萌新在入门二叉树时容易犯的一些错误,你也来试试自己会不会掉到这些坑里把~


一、求二叉树节点个数

错误示例:

int TreeSize(BTNode* root)
{if(root == NULL)return ;int size = 0;size++;TreeSize(root->left);TreeSize(root->right);return Size;
}

这里的错误是,每当递归一次时,其实是在函数栈帧中另外开辟了一个变量size,每次size++都是在新开辟的变量size上++。并没有影响到最开始的变量size。

正确示例:

int TreeSize(BTNode* root)
{if(root == NULL)return 0;static int size = 0;size++;TreeSize(root->left);TreeSize(root->right);return size;
}

在这个示例中,size将在静态区开辟,并且只会初始化一次,不用担心每次递归时会将size重新初始化为0。这样,size每次都可以正确的+1;
另外的方法就是,创建一个全局变量,并将整型变量的地址传入函数,通过变量的地址改变变量的大小。但是这样需要注意的是,需要每次要计数的时候手动将全局变量置为0。

二、求树的叶子结点个数

错误示例:

int TreeLeafSize(BTNode* root)
{if(root->left == NULL&&root->right == NULL){return 1;}return TreeLeafSize(root->left)+TreeLeafSize(root->right);
}

那么这里错在哪呢?
其实这里错在缺少一个前置判断

if(root == NULL)
{return 0;
}

如果没有这个判断条件的话,就会出现访问空指针的情况。

三、求树的高度

错误示例:

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

这段代码逻辑上没有错,但是其中有一个非常大的诟病。当函数在递归时,会反复调用TreeHeight()。因为之前的调用没有将结果记下来,就导致每当需要上一次函数调用的结果时,又再次去调用函数。
改进:

int TreeHeight(BTNode* root)
{if(root == NULL){return 0;}int leftHeight = TreeHeight(root->left);int rightHeight = TreeHeigt(root->right);return leftHeight>rightHeight?leftHeight+1:rightHeight+1
}

四、二叉树查找值为x的结点

错误示例:

BTNode* TreeFind(BTNode* root,BTDataType x)
{if(root == NULL)return NULL;if(root->data == x){return root;}TreeFind(root->left,x);TreeFind(root->right,x);
}

这段代码逻辑看起来非常的自洽,但事实上逻辑上并不自洽。 首先要问自己一个问题:最下面的两次TreeFind的目的是什么?
事实上最下面两次TreeFind没有任何作用,因为你没有用到TreeFind的结果。

正确代码:

BTNode* TreeFind(BTNode* root,BtDataType x)
{if(root == NULL){return NULL;}if(root->data == x){return root;}BTNode* ret1 = TreeFind(root->left,x);if(ret1){return ret1;}BTNode* ret2 = TreeFind(root->left,x);if(ret2){return ret2;}}

总结

以上就是笔者对二叉树递归里的一些易错点的记录。代码纯手打,可能存在漏洞、瑕疵。如发现欢迎指正!

http://www.dinnco.com/news/36303.html

相关文章:

  • 外贸型网站推广与监测目前最好的营销模式
  • 网站建设公司的出路网站维护费用
  • 用fw做明星的网站深圳网
  • 游戏网站开发具备常见的营销方式有哪些
  • 淘宝网电脑版登录入口官网枫林seo工具
  • react 做网站免费二级域名申请网站
  • 网站会员模板网络营销策划方案怎么做
  • 魔域永恒网页游戏一个网站可以优化多少关键词
  • java 网站开发流程网站建设流程图
  • 广州公司注册地址迁址网上办理seo查询爱站
  • 超市供应商平台百度seo指南
  • 佛山网站建设哪个好点广州网站建设
  • wix英文网站建设长沙关键词排名软件
  • 模板网站建设哪家专业推广普通话的内容
  • 如何建设自己的公司网站网上推广渠道有哪些
  • 重庆一站式建设网站平台全网自媒体平台大全
  • 哈尔滨网站建设服务十大洗脑广告
  • 专业做网站建设的公司微信营销号
  • 水利部建设管理与质量安中心网站朋友圈的广告推广怎么弄
  • 分类wordpress成都百度推广和seo优化
  • eclipse做网站代码网络推广怎么样
  • wordpress登录接口百度seo优化系统
  • wordpress隐藏站点标题环球网最新消息疫情
  • 天津武清网站开发百度知道合伙人答题兼职入口
  • 西城做网站公司深圳网络营销全网推广
  • 大庆做网站的公司河北seo公司
  • 中国建设工程招标官方网站站长工具seo综合查询是什么
  • seo 网站地图营销知识和技巧
  • 临沂企业做网站31省市新增疫情最新消息
  • 提高网站目标流量关键词竞价排名是什么意思