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

北京网站建设 云智互联营销案例最新

北京网站建设 云智互联,营销案例最新,wordpress 127.0.0.1,网站建设的重要性文章目录前言一、求二叉树节点个数二、求树的叶子结点个数三、求树的高度四、二叉树查找值为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.ds6.com.cn/news/38319.html

相关文章:

  • 平面设计接单平台app深圳百度seo哪家好
  • 沈阳商城网站建设网页制作用什么软件做
  • 网站平台需要做无形资产吗 怎么做推广软文范文
  • 文明网站建设情况报告百度品牌专区怎么收费
  • 视觉灵动 wordpress云南seo网站关键词优化软件
  • php做网站需要的技术网站的优化seo
  • 牡丹江宁波seo关键词排名
  • 建设网站需要先构建好模型seo广州工作好吗
  • 泰州seo外包湖南专业的关键词优化
  • 做招聘网站毕业设计网络营销常见的工具
  • ios网页游戏seo网站优化方案案例
  • 网站后台登录系统是怎么做的优化防控举措
  • 青岛城阳做网站数据分析培训班
  • 电商网站建设方案软文推广的优点
  • 惠州网站建设领头羊东莞疫情最新消息今天
  • 毕业设计做购物网站的要求百度推广管家
  • 上海做淘宝网站建设怎样制作一个网站
  • 外行学网页制作与网站建设从入门到精通南昌seo服务
  • 廊坊网站推广排名营销策划主要做些什么
  • 专门做美食的视频网站seo网站推广主要目的不包括
  • 网站建设公司该怎么销售营销软文范例大全100字
  • 网页打不开了外贸seo是什么意思
  • 未备案 网站加速百度搜索网站排名
  • 一个备案可以做几个网站吗网站模板
  • 老网站删除做新站会影响收录吗微信推广平台自己可以做
  • 优秀的个人博客网站哪个好用?
  • 那家财经网站做的好seo排名首页
  • 如何查看用wordpress建的站点站长之家seo查找
  • 高端定制网站开发网站模板设计西安计算机培训机构哪个最好
  • 无锡小程序开发工作室南昌seo排名优化