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

南宁建行 网站中交建设集团网站

南宁建行 网站,中交建设集团网站,南昌网站建设公司效果,用pc做网站服务器为什么不如云主机2.7 二叉树的相关操作 1. size方法 获取二叉树元素个数 思路:遍历思路,在前面文章中,前序 中序 后序遍历的时候,会把树中的所有结点遍历一次。可以添加一个计数器,遍历一个结点就加一次。 于是有如下代码&#xff1…

2.7 二叉树的相关操作

1. size方法 获取二叉树元素个数

思路:遍历思路,在前面文章中,前序 中序 后序遍历的时候,会把树中的所有结点遍历一次。可以添加一个计数器,遍历一个结点就加一次。

于是有如下代码:

public int size = 0;   //定义一个成员变量size
public int nodeSize(TreeNode root) {if(root == null)  return 0;size++;nodeSize(root.left);nodeSize(root.right);return size;
}

在IDEA中测试符合预期,但还是思考,上面的方法,也没有利用到这个方法的返回值。

换个角度,以子问题的思路来思考:要算当前root总共有多少个结点,其实就等于:当前root结点的左子树的结点个数 + 当前root结点的右子树的结点个数 + 1。

于是有如下代码:

public int nodeSize(TreeNode root) {int size = 0;if(root == null) return size;int leftSize = nodeSize(root.left);int rightSize = nodeSize(root.right);return leftSize + rightSize + 1;
}

该代码仍是化大树为小树,逐个解决子问题过程。

下图为部分递归过程,注意先递出去,再归回来

2. getLeafSize方法 得到二叉树叶子结点个数

先回忆概念,叶子结点也就是度为0的结点,也就是左右子树均为null的结点

于是有如下代码:

public int leaveSize = 0;public int getLeaveSize(TreeNode root) {if(root == null) return leaveSize;if(root.left == null && root.right == null) {leaveSize++;}getLeaveSize(root.left);getLeaveSize(root.right);return leaveSize;
}

同样的,也可以换一种子问题思路来考虑,要求当前root有多少个叶子结点,其实就是相当于求root左树的叶子结点的个数 + root右树的叶子结点的个数 

于是有如下代码:

public int getLeaveSize(TreeNode root) {if(root == null) return 0;if(root.left == null && root.right == null) {return 1;}int leftLeaveSize = getLeaveSize(root.left);int rightLeaveSize = getLeaveSize(root.right);return leftLeaveSize + rightLeaveSize;
}

下图为部分递归过程,注意先递出去,再归回来 

3. getKLevelNodeCount方法 获得第K层的结点的个数

root这棵树的第K层的结点的个数 = root.left第K - 1层的结点的个数 + root.right第K - 1层的结点的个数

如上图,若像求第3层的结点的个数,就等于求root(A).left(B)的第二层 + root(A).right(C)的第二层

于是有代码如下:

public int getKLevelNodeCount(TreeNode root, int k) {if(root == null) return 0;if(k == 1) {return 1;}return getKLevelNodeCount(root.left, k - 1) + getKLevelNodeCount(root.right, k - 1);
}

遍历模拟图为:

4. getHeight方法 获得二叉树高度

分析:整棵树的高度 = root左树的高度 + root右树的高度 + 1

于是有如下代码:

public int getTreeHeight(TreeNode root) {if(root == null) return 0;int leftTreeHeight = getTreeHeight(root.left);int rightTreeHeight = getTreeHeight(root.right);return leftTreeHeight > rightTreeHeight ? leftTreeHeight + 1 : rightTreeHeight + 1;
}

如下图为递归的部分过程 

5. find方法 检查二叉树是否存在值为val的元素

find方法,对比之前的数据结构查找,也是在整个数据结构中遍历一次,定义一个标识,如果有,就标识为ture,否则为false。

于是有如下代码:补充:下面代码是使用先序遍历来进行的查找

public boolean find(TreeNode root, char value) {if(root == null) return false;if(root.val == value) {return true;}boolean leftFlg = find(root.left, value);if(leftFlg == true) {return true;}boolean rightFlg = find(root.right, value) {return true;}    return false;
}

http://www.yayakq.cn/news/601930/

相关文章:

  • 凤凰一级a做爰片免费网站美工培训网课
  • 唐山市城市建设规划局网站源代码
  • 网站建设流程王晴儿铜梁集团网站建设
  • 网站建设评判标准wordpress 边栏
  • 临沧网站建设ynyuewordpress 微信 权限
  • 南充网站设计学校大岭山网站仿做
  • 青岛建设房地产招聘信息网站网建公司
  • 做视频网站的空间安顺网站开发
  • 网站开发的工作内容盘搜搜
  • 济南网站建设外包公司哪家好excel做公司的小网站
  • 网站工作有哪些内容做网站需要注意的点
  • 做网站需要自己研发吗iis7 网站无法访问
  • 泉州关键词优化百度推广账户优化方案
  • 网站推广是网站建设完成之后的长期工作网站设计报价单
  • 吕梁市住房与城乡建设厅网站怎么做好网站
  • 海南网约车最新政策google seo 营销网站
  • 优秀简历制作网站四川省建设执业注册中心网站
  • 外贸自建零售网站做仿牌所得税汇算清缴在哪个网站做
  • 目前做外贸的网站哪个比较好wordpress 文章类
  • 软件开发网站策划方案河北网站seo地址
  • 丹东 网站开发禅城南庄网站制作
  • 中山百度网站推广河南网站排名优化价格
  • 济南学网站建设哪里好七牛云存储代替WordPress
  • 电子商务网站建设策划书模板郑州市网站建设怎么样
  • 广告创意图片重庆百度提升优化
  • 老域名购买攀枝花seo
  • 网站建设名词解析wordpress数据库安装失败
  • 响应式网站宽度可视化拖拽建站系统
  • 福州外贸网站制作成都网站建设前50强
  • 长乐区住房和城乡建设局网站湖南营销型网站建设公司