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

怎样做58网站网页版小游戏在线玩

怎样做58网站,网页版小游戏在线玩,Linux主机设置网站首页,如何创建博客网站作者 | BoCong-Deng题图 | 视觉中国出品 | CSDN博客树结构对于程序员来说应该不陌生#xff0c;特别是二叉树#xff0c;基本只要接触算法这一类的都一定会碰到的#xff0c;所以我打算通过一篇文章#xff0c;对二叉树结构的相关算法进行总结汇总#xff0c;思路和代码实…作者 | BoCong-Deng题图 | 视觉中国出品 | CSDN博客树结构对于程序员来说应该不陌生特别是二叉树基本只要接触算法这一类的都一定会碰到的所以我打算通过一篇文章对二叉树结构的相关算法进行总结汇总思路和代码实现相结合让你不在惧怕二叉树。(ps后面我还想写一篇树结构的高级篇就是多叉数就是对我平时看算法论文碰到的一些新奇的算法比如B树、B树还有我一种叫做Bed树的新奇算法等等)单纯就是想分享技术博文还想说一句就是如果觉得有用请点个关注、给个赞吧也算对我来说是个宽慰毕竟也得掉不少头发嘿嘿嘿。下面的思路讲解中我会给出一个类伪代码的思路然后进行相关说明也就是一种思路框架有了思路框架以后碰到问题就直接交给框架完成。本文主要说一下二叉搜索树(Binary Search Tree简称 BST)BST是一种很常用的的二叉树。它的定义是一个二叉树中任意节点的值要大于等于左子树所有节点的值且要小于等于右边子树的所有节点的值。如下就是一个符合定义的 BST后面如果遇到特殊的思路结构如多叉树我会特别说明。首先我们先给出二叉树的节点定义(这个定义应该不陌生吧有刷算法题都会碰到)。public class TreeNode {int val;TreeNode left;TreeNode right;TreeNode(int x) { val x; }}递归不过这里要说明一点的是在伪代码中的“进行想要的操作”的位置不一定就在我放置的位置具体位置还需要我们根据不同的实际需求进行判断。不过因为前中后序的遍历递归进入的时机应该需要和我的一样。先序遍历遍历根节点如果根节点为空返回否则遍历根节点然后先序遍历左子树再先序遍历右子树。public void preorderTraverse(TreeNode root){System.out.print(node.val );preorderTraverse(root.left);preorderTraverse(root.right);}中序遍历路过根节点如果根节点为空返回否则中序遍历左子树然后遍历根节点再中序遍历右子树。public void inorderTraverse(TreeNode root){inorderTraverse(root.left);System.out.print(node.val );inorderTraverse(root.right);}后序遍历路过根节点如果根节点为空返回否则后序遍历左子树再后序遍历右子树最后遍历根节点。public void postorderTraverse(TreeNode root){postorderTraverse(root.left);postorderTraverse(root.right);System.out.print(node.val );}迭代(非递归)我们使用迭代的思想其实就是利用循环和栈来模拟递归的操作上面递归的操作其实就是一个不断将自己以及左右子节点进行压栈和出栈的过程如果理解了上面的算法下面的算法就好理解了前序遍历public List preorderTraversal(TreeNode root) {List list new ArrayList;if(root){return list;}Stack stack new Stack;stack.push(root);while(!stack.isEmpty){TreeNode res stack.pop;if(res.right ! )stack.push(res.right);if(res.left ! )stack.push(res.left);list.add(res.val);}return list;}中序遍历public List inorderTraversal(TreeNode root) {List list new ArrayList;if(root){return list;}Stack stack new Stack;TreeNode curr root;while(curr ! || !(stack.isEmpty)){if(curr! ){stack.push(curr);curr curr.left;}else{curr stack.pop;list.add(curr.val);curr curr.right;}}return list;}后序遍历我们可以很简单的实现另一种遍历”根-右-左“遍历。虽然这种遍历没有名字但是他是后序遍历的反序。所以我们可以利用两个栈利用栈的LIFO特点来实现后续遍历。public List preorderTraversal(TreeNode root) {List list new ArrayList;if(root){return list;}Stack stack new Stack;stack.push(root);while(!stack.isEmpty){TreeNode res stack.pop;if(res.left ! )stack.push(res.left);if(res.right ! )stack.push(res.right);list.add(res.val);}list.reserve;return list;}深度优先搜索(DFS)其实二叉树的先序遍历中序遍历后序遍历都是深度优先搜索深搜是一种思想并不具体指代实现方式你可以使用递归也可以使用栈来实现所以上面提到的都是深度优先搜索的实现方式毕竟“深度优先”嘛。那在这里我就是提几个实际的应用的例子加深一下印象。二叉树的最大深度public int maxDepth(TreeNode root) {if(root){return 0;}int left maxDepth(root.left);int right maxDepth(root.right);return Math.max(left,right)1;}二叉树的镜像public void Mirror(TreeNode root) {if(root!){if(root.left! || root.right! ){TreeNode temp root.left;root.leftroot.right;root.righttemp;}Mirror(root.left);Mirror(root.right);}}对称二叉树boolean isSymmetrical(TreeNode pRoot){if(pRoot )return true;return real(pRoot.left,pRoot.right);}public boolean real(TreeNode root1,TreeNode root2){if(root1 root2 ){return true;}if(root1 || root2 ){return false;}if(root1.val ! root2.val){return false;}return real(root1.left,root2.right)real(root1.right,root2.left);}路径总和public class Solution {private ArrayList list new ArrayList;private ArrayList listAll new ArrayList;public ArrayList FindPath(TreeNode root,int target) {if(root )return listAll;list.add(root.val);target - root.val;if(target 0 root.left root.right ){listAll.add(new ArrayList(list));}FindPath(root.left,target);FindPath(root.right,target);list.remove(list.size-1);return listAll;}}重建二叉树public TreeNode reConstructBinaryTree(int [] pre,int [] in) {return reConstructBinaryTree(pre,0,pre.length-1,in,0,in.length-1);}public TreeNode reConstructBinaryTree(int [] pre,int startpre,int endpre,int [] in,int startin,int endin){if(startpre endpre || startin endin){return ;}TreeNode root new TreeNode(pre[startpre]);for(int i startin;iendin;i){if(in[i] pre[startpre]){root.left reConstructBinaryTree(pre,startpre1,startprei-startin,in,startin,i-1);root.right reConstructBinaryTree(pre,startprei-startin1,endpre,in,i1,endin);}}return root;}二叉搜索树的最近公共祖先class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {if(root || root p || root q){return root;}TreeNode left lowestCommonAncestor(root.left,p,q);TreeNode right lowestCommonAncestor(root.right,p,q);if(left! right!){return root;}return left!?left:right;}}二叉树的序列化和反序列化序列化public String serialize(TreeNode root) {if (root ) {return ;}// 利用二叉树的层次遍历方式进行序列化StringBuilder res new StringBuilder;LinkedList queue new LinkedList;queue.add(root);while (!queue.isEmpty) {TreeNode node queue.remove;if (node ! ) {res.append(node.val).append(
http://www.zqtcl.cn/news/443319/

相关文章:

  • 北京网站备案代理国家企业信用信息公示系统广东
  • 推销网站重庆网站优化公司哪家便宜
  • 外贸公司网站搭建礼品网站建设
  • 网站建设 今晟网络中国制造网官网登录
  • 东莞网站设计如何常州做网站设计
  • php网站数据库修改网站备案有必要吗
  • 电商会学着做网站呢WordPress又拍云cdn
  • 网站健设推广产品多少钱网站规划有什么意义
  • 诚信网站备案中心内江网站建设新闻
  • 品牌形象网站有哪些百度应用中心
  • 网站建设找什么工作室甜点网站建设的功能及意义
  • wordpress 近期文章seo排名优化推广
  • 网页设计制作网站素材网站程序哪个好
  • 郑州好的网站设计公司软件开发哪里学好
  • 网站新建设请示软件外包平台哪家可信赖
  • 做阿里巴巴还是做网站好安卓手机怎么做网站
  • 社区智慧警务网站如何推进警务室建设方案广东网络推广服务
  • 东莞艺美网站建设wordpress get header
  • 做玩具什么 网站比较好网址域名
  • 网站做用户登录中国建设部官方网站资格证查询
  • 济宁网站建设公司大型餐饮网站建设
  • 昊源建设监理有限公司网站做那种的视频网站有哪些
  • wordpress滑块代码seo外链增加
  • 衡阳网站建设公司地址书店网站怎么做
  • 如何检查网站是否做cdn加速html网页基础代码
  • 做网站的岗位好吗钓鱼网站到底怎么做
  • 大连做网站那个公司最好wordpress+高清背景
  • 怎样做网站xml案例建网站
  • 海口发布最新通告用二级域名做网站对seo
  • 网站301重定向 权重转移网站不用下载免费软件