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

公司简介ppt模板范文免费厦门seo建站

公司简介ppt模板范文免费,厦门seo建站,网站做优化多少钱,设计工作室logo创意🐵本篇文章将对二叉树的一些基础操作进行梳理和讲解 一、操作简述 int size(Node root); // 获取树中节点的个数int getLeafNodeCount(Node root); // 获取叶子节点的个数int getKLevelNodeCount(Node root,int k); // 获取第K层节点的个数int getHeight(Node r…

🐵本篇文章将对二叉树的一些基础操作进行梳理和讲解


一、操作简述

int size(Node root);  // 获取树中节点的个数int getLeafNodeCount(Node root);  // 获取叶子节点的个数int getKLevelNodeCount(Node root,int k);  // 获取第K层节点的个数int getHeight(Node root);  // 获取二叉树的高度TreeNode find(Node root, int val);   // 检测值为value的元素是否存在void levelOrder(Node root);  //层序遍历boolean isCompleteTree(Node root)   // 判断一棵树是不是完全二叉树

接下来会对下面这棵树进行上述操作:

public class BinaryTree {static class TreeNode {public char val;public TreeNode left;public TreeNode right;public TreeNode(char val) {this.val = val;}}
}

二、代码实现

1.获取树中结点的个数

思路:定义一个nodeSize, 按照二叉树前序遍历的方式遍历这颗二叉树, 每遍历一个结点, nodeSize就+1

    public int nodeSize; //nodeSize不能写到方法内部,否则每次递归nodeSize都会被初始化为0,最终导致结果错误public int size(TreeNode root) {if (root == null) {return 0;}nodeSize++;size(root.left);size(root.right);return nodeSize;}

2. 获取树中叶子结点的个数

思路:叶子结点也就是没有左右孩子的结点,该方法的实现和上一个方法思路大体一致,定义一个leafNode,在遍历这颗二叉树的过程中,如果该节点没有左右孩子则leafNode + 1

    public static int leafNode;public int getLeafNodeCount(TreeNode root) { //计算叶子结点个数if (root == null) {return 0;}if (root.left == null && root.right == null) {leafNode++;}getLeafNodeCount(root.left);getLeafNodeCount(root.right);return leafNode;}

3. 计算k层结点的个数

思路:假如要计算第3层结点的个数,k = 3,整个树的第3层也就是这个树的左子树(B)的第2层+右子树(C)的第2层,也就是B的左子树的第一层 + B的右子树的第一层 和C的左子树的第一层 + C的右子树的第一层,通过前序遍历的方式,每遍历到一层k就减1,当k == 1时就返回1

    public int getKLevelNodeCount(TreeNode root,int k) {//计算第k层结点的个数if (root == null) {return 0;}if (k == 1) {return 1;}k--;return getKLevelNodeCount(root.left, k) +getKLevelNodeCount(root.right, k);}

4. 获取树的高度

思路:整个树的高度也就是左子树的高度和右子树的高度的最大值+1,再通过递归的方式求左子树和右子树的高度

    public int getHeight(TreeNode root) {if (root == null) {return 0;}int leftHeight = getHeight(root.left);int rightHeight = getHeight(root.right);return Math.max(leftHeight, rightHeight) + 1;}

5. 检测值为val的元素的结点是否存在

思路:遍历这棵二叉树,找到值为val的结点后逐层返回,直接看代码:

    public TreeNode find(TreeNode root, char val) {if (root == null) {return null;}if (root.val == val) {return root;}TreeNode leftNode = find(root.left, val);//必须用一个变量来接收,否则上述返回的root没有意义,最终返回的还是nullif (leftNode != null) { //leftNode不为空说明找到了,将其返回return leftNode;}TreeNode rightNode = find(root.right, val);if (rightNode != null) {return rightNode;}return null; //没有找到val结点就返回null}

6. 层序遍历二叉树

思路:定义一个队列,先将这个树的根结点入队,之后通过循环如果队列不为空,则让队头结点出队,判断该结点的左和右是否为空,不为空的入队,如此循环知道队列为空,整个二叉树遍历完毕

    public void levelOrder(TreeNode root) {if (root == null) {return;}Queue<TreeNode> queue = new LinkedList<>();queue.offer(root);while(!queue.isEmpty()) {TreeNode cur = queue.poll();System.out.print(cur.val +" ");if(cur.left != null) {queue.offer(cur.left);}if (cur.right != null) {queue.offer(cur.right);}}}

7. 判断一棵树是不是完全二叉树

以这棵树为例:

一开始和层序遍历的思路一样,定义一个队列,将树的根结点存入队列中,接下来设置一个循环,当队列不为空的情况下将队头元素出队,如果出队结点不为空则直接将其左右孩子入队(不用判断其左右孩子是否为空)如果出队结点为空则结束该循环

完成上述操作后再设置一个循环,循环条件仍然是队列不为空,每次循环都将队头元素出队然后进行判断,如果该结点不为空,则该树不是完全二叉树

根据上述操作对上面这棵树进行实操

将根结点入队,之后进入循环,将队头元素出队,A结点不为空所以将其左右孩子入队,之后再将队头元素出队,B结点不为空所以再将其左右孩子入队

再将C出队,C结点不为空,再将其左右孩子入队,再将D结点出队,D结点不为空,再将其左右孩子入队,之后再将队头元素出队,此时出队的元素为空,此循环结束

进入第二个循环,只要队列不为空,就出队队头元素然后对其进行判断,只要出队元素不为空,则其不是完全二叉树,上述队列全部为null,所以该树是完全二叉树

如果是下面这棵树,在第一次循环后,会是如下情况:

在第二个循环由于D结点不为null,所以该树不是完全二叉树

代码如下:

    public boolean isCompleteTree(TreeNode root) {if (root == null) {return false;}Queue<TreeNode> queue = new LinkedList<>();queue.offer(root);while(!queue.isEmpty()) {TreeNode cur = queue.poll();if (cur == null) {break;}queue.offer(cur.left);queue.offer(cur.right);}while(!queue.isEmpty()) {TreeNode cur = queue.poll();if (cur != null) {return false;}}return true;}

🙉本篇文章到此结束

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

相关文章:

  • 网站如何做3d产品三星官网商城
  • 涉密资质 网站建设宝安网页
  • dw做网站怎么设置页面音乐seo的基本工作内容
  • 外国纪录片网站机场建设网大论坛
  • 兰州市建设厅网站遵义网站开发
  • 网站制作过程合理的步骤半月报网站建设商务代表工作总结
  • 做网站图片怎么做wordpress 不显示分类中的某篇文章
  • 没有货源怎么开网店?昆明怎样优化网站
  • 怎么做网站后门网站模板建站
  • 找做金融的网站有哪些网站服务器如何做端口映射
  • 手机网站开发用什么如何在电脑建设网站
  • wordpress淘宝客建站教程视频wordpress+网速
  • 国外设计参考网站网站浮动条
  • dw怎样建设网站昆明怎样优化网站
  • 网站制作什么做百度识图找原图
  • 做网站用盗版PS做暧昧网站
  • 网站建设云浪科技图书销售网站建设
  • 网站海报是怎么做的网站百度地图生成器
  • 怎样用云服务器做网站环球资源网入驻费用
  • 做直播网站赚钱工程装修
  • 网站维护学习有没有做西餐的视频网站
  • 网站前端设计培训义乌做网站zisou8
  • 没有网站怎么做seohtml静态网站怎么放在网站上
  • 做内容网站资源库网站建设
  • 帝国cms这么做网站开个网站做代理
  • 做手机网站的好处网站前台登陆页面怎么改
  • 企业没有做网站有的坏处外包小程序开发的价格
  • 温江区建设局网站微网站的定义
  • 上海公司网站建设以子为什么不要做外包员工
  • wordpress免费建站吗摄影剪辑培训班