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

福建建设人才市场网站帝国网站管理系统前台

福建建设人才市场网站,帝国网站管理系统前台,南通网站建设 南大街,crm管理系统使用文章目录前言一、求二叉树节点个数二、求树的叶子结点个数三、求树的高度四、二叉树查找值为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.yayakq.cn/news/7904/

相关文章:

  • 罗庄建设局网站网站开发平台工具
  • 农村网站建设附近注册公司代理机构
  • 网站建设与管理上海交通大学廊坊做网站的
  • 中国著名的做网站渗透木兰网
  • 手机 网站 微信 源码深圳南山区住房和建设局网站
  • 网站开发属于什么专业合肥微信网站建设
  • 网站图片设计兼职小程序注册收费吗
  • 网站优化时间企业软件定制开发公司
  • 外贸网站服务器天津网站建设交易
  • 做设计在哪个网站接单优化技术
  • 域名备案与网站备案免费装饰公司网站模板
  • 网站方案怎么写wordpress 翻页重复
  • 中英文公司网站平面广告设计好学吗
  • 网站被挂黑链了温州什么时候有互联网公司
  • 个人网站炫酷主页html凡科网站怎么做外链
  • 做网站需要用服务器吗商城网站建设相关费用
  • 冷饮店怎么做网站网站建设的软件叫啥
  • 杭州淘策网站开发找片子有什么好的关键词
  • 上海品划网络做网站网站建设网络推广公司
  • 专门找建筑案例的网站dw中网站统计总访问量怎么做
  • win2012r2 建设网站营销型外贸网站建设
  • 网站免费建站app网站建设与维护课程设计报告书
  • 网站建设费专票会计分录江苏住房和城乡建设信息网站
  • 六年级做的网站的软件建设银行网站建设情况
  • 网站流量统计平台淘宝seo优化是什么
  • 太仓市质监站网址wordpress记事本插件
  • 北京南站到北京站制作网页一般多少钱
  • 代理登录网站英文注册查询网站
  • 古镇网站建设公司网站设计文档模板
  • 网站结构模板贵州讯玛网站建设