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

医院建设网站的作用排名seo怎么样

医院建设网站的作用,排名seo怎么样,网络管理员正在设计新的无线网络,国家年报个体户工商营业执照一、什么是树 概念 树是一种非线性的数据结构#xff0c;它是由n#xff08;n0#xff09;个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树#xff0c;也就是说它是根朝上#xff0c;而叶朝下的。它具有以下的特点#xff1a; 1、有…一、什么是树 概念 树是一种非线性的数据结构它是由nn0个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树也就是说它是根朝上而叶朝下的。它具有以下的特点 1、有一个特殊的结点称为根结点根结点没有前驱结点除根结点外其余结点被分成M(M 0)个互不相交的集合T1、T2、…、Tm其中每一个集合 Ti (1 i m) 又是一棵与树类似的子树。 2、每棵子树的根结点有且只有一个前驱可以有0个或多个后继 3、树是递归定义的。 注意树形结构中子树之间不能有交集否则就不是树形结构 1.1、 概念重要 1、结点的度一个结点含有子树的个数称为该结点的度 如图A的度为6 2、树的度一棵树中所有结点度的最大值称为树的度 如图树的度为6 3、叶子结点或终端结点度为0的结点称为叶结点 如图B、C、H、I…等节点为叶结点 4、双亲结点或父结点若一个结点含有子结点则这个结点称为其子结点的父结点 如图A是B的父结点A是C的父结点A是D的父结点… 5、孩子结点或子结点一个结点含有的子树的根结点称为该结点的子结点 如图B是A的孩子结点C是A的孩子结点D是A的孩子结点 6、根结点一棵树中没有双亲结点的结点如图A 7、结点的层次从根开始定义起根为第1层根的子结点为第2层以此类推 8、树的高度树中结点的最大层次 如图A树的高度为4 树的深度A的深度是1E的深度是2J的深度是3Q的深度是4 9、非终端结点或分支结点度不为0的结点 如图D、E、F、G…等节点为分支结点 10、兄弟结点具有相同父结点的结点互称为兄弟结点 如图B、C是兄弟结点 11、堂兄弟结点双亲在同一层的结点互为堂兄弟如图H、I互为兄弟结点 12、结点的祖先从根到该结点所经分支上的所有结点如图A是所有结点的祖先 13、子孙以某结点为根的子树中任一结点都称为该结点的子孙。如上图所有结点都是A的子孙 14、森林由mm0棵互不相交的树组成的集合称为森林 1.2、树的表示形式 树结构相对线性表就比较复杂了要存储表示起来就比较麻烦了实际中树有很多种表示方式如双亲表示法孩子表示法、孩子双亲表示法、孩子兄弟表示法等等。我们这里就简单的了解其中最常用的孩子兄弟表示法。 class Node {int value; // 树中存储的数据Node firstChild; // 第一个孩子引用Node nextBrother; // 下一个兄弟引用 }孩子兄弟表示法 孩子双亲表示法 1.3、树的应用 文件系统管理目录和文件 二、二叉树 2.1、概念 一棵二叉树是结点的一个有限集合该集合 或者为空或者是由一个根节点加上两棵别称为左子树和右子树的二叉树组成 二叉树 跟我们前面讲的树的区别就在于二叉树 的 每个结点最多只能有 两个 “孩子”/子树最少 零个。 也就是说一棵树如果是二叉树那么它的每棵子树都是 二叉树【都有左子树 和 右子树】。 注意 1. 二叉树不存在度大于2的结点 2. 二叉树的子树有左右之分次序不能颠倒因此二叉树是有序树 3. 对于任意的二叉树都是由以下几种情况复合而成的 2.2、两种特殊的二叉树 2.2.1、 满二叉树 满二叉树: 一棵二叉树如果每层的结点数都达到最大值则这棵二叉树就是满二叉树。也就是说如果一棵二叉树的层数为K且结点总数是 则它就是满二叉树 2.2.2、完全二叉树 完全二叉树: 完全二叉树是效率很高的数据结构完全二叉树是由满二叉树而引出来的。对于深度为K的有n个结点的二叉树当且仅当其每一个结点都与深度为K的满二叉树中编号从0至n-1的结点一一对应时称之为完全二叉树。 要注意的是满二叉树是一种特殊的完全二叉树 2.3、二叉树的性质 若规定根结点的层数为1则一棵非空二叉树的第k层上最多有 2的k-1次方 (k0) 个结点 若规定只有根结点的二叉树的深度为1则深度为K的二叉树的最大结点数是 2的k次方-1 (k0) 对任何一棵二叉树, 如果其叶结点个数为 n0, 度为2的非叶结点个数为 n2,则有 n0n21 得出一个结论任何一棵二叉树叶子结点比度为2的节点多一个 4. 具有n个结点的完全二叉树的深度k为 上取整 对于具有n个结点的完全二叉树如果按照从上至下从左至右的顺序对所有节点从0开始编号则对于序号为i的结点有 1若i0双亲序号(i-1)/2i0i为根结点编号无双亲结点 2若2i1n左孩子序号2i1否则无左孩子 3若2i2n右孩子序号2i2否则无右孩子 二叉树的练习题 某二叉树共有 399 个结点其中有 199 个度为 2 的结点则该二叉树中的叶子结点数为 A 不存在这样的二叉树 B 200 C 198 D 199 在具有 2n 个结点的完全二叉树中叶子结点个数为 A n B n1 C n-1 D n/2 一个具有767个节点的完全二叉树其叶子节点个数为 A 383 B 384 C 385 D 386 一棵完全二叉树的节点数为531个那么这棵树的高度为 A 11 B 10 C 8 D 12 答案 1.B 2.A 3.B 4.B 2.4、二叉树的存储 二叉树的存储结构分为顺序存储 和 类似于链表的链式存储。 这里我们讲链式存储。 二叉树的链式存储是通过一个一个的节点引用起来的。常见的表示方式有二叉 和 三叉表示方式。 【二叉 孩子表示法三叉 孩子双亲表示法】 2.4.1、模拟创建二叉树 提前说明二叉树的构建是一个非常复杂的过程因为目前作者对二叉树的理解还不是很深。所以我们先会创建一个二叉树但是这种创建方式很LOW只是为了应付前期使用比较简单不是正确的常用创建方式。 首先经过刚刚分析二叉树是有一个一个节点构成的所以我们就要创建节点 //首先经过刚刚分析二叉树是有一个一个节点构成的所以我们就要创建节点 class BTNode{public char val; //值域public BTNode left; //存储左孩子的引用public BTNode right; //存储右孩子的引用/*** 为什么不提供left 和 right的构造方法这是因为我们创建节点的时候知道左右孩子的引用吗* 肯定是不知道的所以不用提供* param val*/public BTNode(char val){this.val val;} }public class BinaryTree {//创建一棵二叉树public BTNode creatBTN(){BTNode A new BTNode(A);BTNode B new BTNode(B);BTNode C new BTNode(C);BTNode D new BTNode(D);BTNode E new BTNode(E);BTNode F new BTNode(F);BTNode G new BTNode(G);BTNode H new BTNode(H);A.left B;A.right C;B.left D;B.right E;E.right H;C.left F;C.right G;return A;} }debug调试看一下我们创建的对不对 说明创建的二叉树的对的 上述代码并不是创建二叉树的方式真正创建二叉树方式后序详解重点讲解 2.5、二叉树的遍历 学习二叉树结构最简单的方式就是遍历。所谓****遍历(Traversal)是指沿着某条搜索路线依次对树中每个结点均做一次且仅做一次访问。访问结点所做的操作依赖于具体的应用问题(比如打印节点内容、节点内容加)。 遍历是二叉树上最重要的操作之一是二叉树上进行其它运算之基础 2.5.1、前序遍历 NLR前序遍历(Preorder Traversal 亦称先序遍历)——访问根结点—根的左子树—根的右子树 2.5.2、中序遍历 LNR中序遍历(Inorder Traversal)——根的左子树—根节点—根的右子树 2.5.3、后序遍历 LRN后序遍历(Postorder Traversal)——根的左子树—根的右子树—根节点。 练习 写出下面二叉树的 前中后排序的 序列 前序遍历 ABDEHCFG 中序遍历 DBEHAFCG 后序遍历 DHEBFGCA 2.5.4、 代码实现二叉树的遍历 前序遍历 // 前序遍历public void preOrder(BTNode root){if(root null){return;}System.out.print(root.val );postOrde(root.left);postOrde(root.right);}中序遍历 // 中序遍历public void inOrder(BTNode root){if(root null){return;}inOrder(root.left);System.out.print(root.val );inOrder(root.right);}后序遍历 // 后序遍历public void postOrde(BTNode root){if(root null){return;}postOrde(root.left);postOrde(root.right);System.out.print(root.val );}总的代码示例 BinaryTree //首先经过刚刚分析二叉树是有一个一个节点构成的所以我们就要创建节点 class BTNode{public char val; //值域public BTNode left; //存储左孩子的引用public BTNode right; //存储右孩子的引用/*** 为什么不提供left 和 right的构造方法这是因为我们创建节点的时候知道左右孩子的引用吗* 肯定是不知道的所以不用提供* param val*/public BTNode(char val){this.val val;} }public class BinaryTree {//创建一棵二叉树public BTNode creatBTN(){BTNode A new BTNode(A);BTNode B new BTNode(B);BTNode C new BTNode(C);BTNode D new BTNode(D);BTNode E new BTNode(E);BTNode F new BTNode(F);BTNode G new BTNode(G);BTNode H new BTNode(H);A.left B;A.right C;B.left D;B.right E;E.right H;C.left F;C.right G;return A;}// 前序遍历public void preOrder(BTNode root){if(root null){return;}System.out.print(root.val );postOrde(root.left);postOrde(root.right);}// 中序遍历public void inOrder(BTNode root){if(root null){return;}preOrder(root.left);System.out.print(root.val );preOrder(root.right);}// 后序遍历public void postOrde(BTNode root){if(root null){return;}preOrder(root.left);preOrder(root.right);System.out.print(root.val );} } Dome public class Dome {public static void main(String[] args) {BinaryTree binaryTree new BinaryTree();BTNode root binaryTree.creatBTN();System.out.print(前序遍历);binaryTree.preOrder(root);System.out.println();System.out.print(中序遍历);binaryTree.inOrder(root);System.out.println();System.out.print(后序遍历);binaryTree.postOrde(root);} } 2.5.5、层序遍历 层序遍历除了先序遍历、中序遍历、后序遍历外还可以对二叉树进行层序遍历。设二叉树的根节点所在层数为1层序遍历就是从所在二叉树的根节点出发首先访问第一层的树根节点然后从左到右访问第2层上的节点接着是第三层的节点以此类推自上而下自左至右逐层访问树的结点的过程就是层序遍历。 选择题 【参考答案】 1.A 2.A 3.D 4.A 2.6、二叉树的基本操作 获取树中节点的个数 int cont 0;// 获取树中节点的个数,以遍历的思路求解public int size1(BTNode root){if(root null){return 0;}cont;size1(root.left);size1(root.right);return cont;}// 获取树中节点的个数,以子问题的思路求解public int size2(BTNode root){if(root null){return 0;}return size2(root.left) size2(root.right) 1;}求叶子节点的个数 // 获取叶子节点的个数, 以遍历的思路求解int cont1 0;public int getLeafNodeCount1(BTNode root){if(root null){return 0;}if (root.left null root.right null){cont1;}getLeafNodeCount1(root.left);getLeafNodeCount1(root.right);return cont1;}// 获取叶子节点的个数 - 以子问题思路求解public int getLeafNodeCount2(BTNode root){if(root null){return 0;}if(root.left null root.right null){//左子树为null右子树为null说明前节点为叶子节点return 1;}return getLeafNodeCount2(root.left) getLeafNodeCount2(root.right);}获取第K层节点的个数 - 子问题思路 // 获取第K层节点的个数 - 子问题思路public int getKLevelNodeCount(BTNode root, int k){if(root null){return 0;}if(k 1){return 1;}return getKLevelNodeCount(root.left, k-1) getKLevelNodeCount(root.right, k-1);}获取二叉树的高度 // 获取二叉树的高度public int getHeight(BTNode root){if(root null){return 0;}int left getHeight(root.left);int right getHeight(root.right);return left right ? left 1 : right 1;}检测值为value的元素是否存在 // 检测值为value的元素是否存在public BTNode find(BTNode root, char val){if(root null){return null;}if(root.val val){return root;}//上面的if没有进去说明没有找到那就要取左树里面找BTNode ret find(root.left,val);if(ret ! null){return ret;}//左树没有找到就在右树找ret find(root.right,val);if(ret ! null){return ret;}//左树和右树都没有找到说明二叉树里面没有这个元素return null;}注意BTNode 里面存的是地址所以在有元素的情况下返回得地址没有元素的时候返回得才是null 所以我们在测试的时候可以使用下面的方式测试 判断一棵树是不是完全二叉树 // 判断一棵树是不是完全二叉树boolean isCompleteTree(BTNode root){if(root null){//如果是一颗空树那也是一棵完全二叉树return true;}//创建一个队列QueueBTNode queue new LinkedList();//将头结点入队queue.offer(root);//判断队列为不为空while (!queue.isEmpty()){//如果队列不为空就将栈顶元素出队列BTNode tmp queue.poll();if(tmp ! null){//如果二叉树不为空就将左右子树入队queue.offer(tmp.left);queue.offer(tmp.right);}else {//如果二叉树为空那就跳出循环break;}}//循环结束就判断栈里面还有没有元素如果有那就说明不是完全二叉树//如果没有那就说明 是完全二叉树while (!queue.isEmpty()){//将栈里面的元素出队列BTNode tmp queue.poll();if(tmp ! null){//判断是不是还有元素如果没有元素栈里面全是nullreturn false;}}return true;}三、有关二叉树的OJ题 3.1、LeetCode 100. 相同的树 public boolean isSameTree(TreeNode p, TreeNode q) {if((p ! null q null) || (p null q ! null)){return false;}else if(p null p null){return true;}else if(p.val ! q.val){//代码走到这里说明p 和 q 都不为空return false;}//代码走到这里说明 q ! null p ! null q.val p.valreturn isSameTree(p.left,q.left) isSameTree(p.right,q.right);}3.2、LeetCode 572. 另一棵树的子树 public boolean isSameTree(TreeNode p, TreeNode q) {//判断两棵树是否相同if((p ! null q null) || (p null q ! null)){return false;}else if(p null p null){return true;}else if(p.val ! q.val){//代码走到这里说明p 和 q 都不为空return false;}//代码走到这里说明 q ! null p ! null q.val p.valreturn isSameTree(p.left,q.left) isSameTree(p.right,q.right);}public boolean isSubtree(TreeNode root, TreeNode subRoot) {if(root null || subRoot null){return false;}//判断两棵树是否相同if(isSameTree(root, subRoot)){return true;}//如果不相同就判断subRoot是不是root的左子树if(isSubtree(root.left, subRoot)){return true;}//如果不是左子树就判断subRoot是不是root的右子树if(isSubtree(root.right, subRoot)){return true;}//如果都不是那就说明subRoot不是root的子树return false;}3.3、LeetCode 110. 平衡二叉树 //求二叉树的高度 public int hight(TreeNode root){if(root null){return 0;}int left hight(root.left);int right hight(root.right);return left right ? left 1 : right 1;}public boolean isBalanced(TreeNode root) {//空树也是平衡二插树if(root null){return true;}//求左树的高度int leftHight hight(root.left);//求右树的高度int rightHight hight(root.right);//左树和右树的高度差不能大于1//并且左树是平衡的右树也是平衡的return Math.abs(leftHight - rightHight) 1 isBalanced(root.left) isBalanced(root.right);}
http://www.dnsts.com.cn/news/139133.html

相关文章:

  • 海口模板建站平台济南网站建设行知科技不错
  • 继续网站建设wordpress中文安装
  • 网站开发报价中国建设银行网站外汇
  • 营销案例网站宝安营销型网站费用
  • seo怎么去优化网站织梦模板首页修改
  • 做安装系统网站有钱赚吗hfs网络文件服务器可以做网站
  • 网站做制作网页时科学规划网页的做法是
  • 贵阳建设网站开封网站建设报价
  • 深圳市seo网站设计多少钱淘宝券商城网站制作
  • 途牛网站建设的基本特点电子商务网站建设含代码
  • 网站开发建设价格附件在哪个平台做推广比较好
  • 淄博免费网站建设生产企业网站欣赏
  • 小学门户网站建设网上购物网站建设规划论文
  • 安庆网站建设推广关键词指数
  • 做网站要多少像素网站图片居中代码
  • 网站模板怎么建设厦门模板建站哪家好
  • 中国银行官网登录入口成都优化网站建设
  • 金华网站建设哪个公司好点小红书官方推广
  • 学校建设外文网站情况成都小程序开发价格
  • 大气企业网站源码公司网站制作方案
  • 企业网站 asp.netapp定制开发运营推广方案
  • 引用网站的内容如何做注释百度竞价排名叫什么
  • 大背景类型的网站设计技术支持 英铭网站建设
  • 源代码管理网站物流网站建设可行性分析
  • 网上购物有哪些网站?台州做微网站
  • 网站优化协议龙华龙岗网站建设公司
  • 做淘宝客没网站怎么打造自己的网站
  • 官网建设流程织梦网站内部优化
  • 如何做企业网站界面营销网站怎么做
  • 平面设计提高审美网站WordPress首页站内搜索