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

那个网站专做地质基础信息网站的二级目录怎么做

那个网站专做地质基础信息,网站的二级目录怎么做,免费平面设计软件有哪些,推广图片设计如何简洁好看上篇已经了解对二叉树有了大概了解#xff0c;本篇学习二叉树的前序、中序、后序及层序遍历的递归与非递归共7种遍历方法#xff0c;快收藏吧~ 目录 1、前序遍历 递归方式#xff1a; 迭代方式#xff1a; 2、中序遍历 递归方式#xff1a; 迭代方式#xff1a; …上篇已经了解对二叉树有了大概了解本篇学习二叉树的前序、中序、后序及层序遍历的递归与非递归共7种遍历方法快收藏吧~ 目录 1、前序遍历 递归方式 迭代方式  2、中序遍历 递归方式 迭代方式 3、后序遍历 递归方式 迭代方式 4、层序遍历 递归方式 迭代方式  二叉树的前序、中序、后序及层序遍历的递归与非递归遍历方法 遍历(Traversal)是指沿着某条搜索路线依次对树中每个结 点均做一次且仅做一次访问。访问结点所做的操作依赖于具体的应用问题(比如打印节点内容、节点内容加 1)。 遍历是二叉树上最重要的操作之一是二叉树上进行其它运算之基础。 二叉树的遍历方法有以下四种 先序遍历根左右         首先访问根结点然后递归地遍历左子树最后遍历右子树。例如对于二叉树先序遍历的结果为1-2-4-8-9-5-10-11-3-6-7。 中序遍历左根右         首先遍历左子树然后访问根结点最后遍历右子树。例如对于二叉树中序遍历的结果为8-4-9-2-10-5-11-1-6-3-7。 后序遍历左右根         首先遍历左子树然后遍历右子树最后访问根结点。例如对于二叉树后序遍历的结果为8-9-4-10-11-5-2-6-7-3-1。 层序遍历    自上而下自左至右逐层访问树的结点的过程就是层序遍历。         它是按广度优先搜索的策略从根结点出发依次访问每一层上的节点。这种策略在实际应用中使用较多如在计算机图形学中用于渲染场景图等。例如对于二叉树层次遍历的结果为1-2-3-4-5-6-7-8-9-10-11 下面讲解代码前序遍历、中序遍历和后序遍历的简单递归方法不附图讲解主要解释它们的迭代方式及层序遍历 1、前序遍历 递归方式 定义 preorder(root) 表示当前遍历到 root 节点的答案。按照定义我们只要首先将 root 节点的值加入答案然后递归调用 preorder(root.left) 来遍历 root 节点的左子树最后递归调用 preorder(root.right) 来遍历 root 节点的右子树即可递归终止的条件为碰到空节点。 class Solution {public ListInteger preorderTraversal(TreeNode root) {ListInteger res new ArrayListInteger();preorder(root, res);return res;}public void preorder(TreeNode root, ListInteger res) {if (root null) {return;}res.add(root.val);preorder(root.left, res);preorder(root.right, res);} } 复杂度分析 时间复杂度O(n)其中 n 是二叉树的节点数。每一个节点恰好被遍历一次。 空间复杂度O(n)为递归过程中栈的开销平均情况下为 O(logn)最坏情况下树呈现链状为 O(n)。 迭代方式  迭代的方式实现方法一的递归函数两种方式是等价的区别在于递归的时候隐式地维护了一个栈而我们在迭代的时候需要显式地将这个栈模拟出来其余的实现与细节都相同具体可以参考下面的代码。 class Solution {public ListInteger preorderTraversal(TreeNode root) {ListInteger res new ArrayList();if(rootnull) return res;StackTreeNode stack new Stack();stack.push(root);while(!stack.isEmpty()){TreeNode p stack.pop();res.add(p.val);if(p.right!null)stack.push(p.right);if(p.left!null)stack.push(p.left);}return res;} } 注释 先将root压栈进入 while 循环每循环一次栈顶出栈一次并记录该结点将其左结点右结点压栈栈为空退出循坏。 时间复杂度O(n)其中 n 是二叉树的节点数。每一个节点恰好被遍历一次。 空间复杂度O(n)为迭代过程中显式栈的开销平均情况下为 O(logn)最坏情况下树呈现链状为 O(n)。 2、中序遍历 递归方式 定义 inorder(root) 表示当前遍历到 root 节点的答案那么按照定义我们只要递归调用 inorder(root.left) 来遍历 root 节点的左子树然后将 root 节点的值加入答案再递归调用inorder(root.right) 来遍历 root 节点的右子树即可递归终止的条件为碰到空节点。 class Solution {public ListInteger inorderTraversal(TreeNode root) {ListInteger res new ArrayListInteger();inorder(root, res);return res;}public void inorder(TreeNode root, ListInteger res) {if (root null) {return;}inorder(root.left, res);res.add(root.val);inorder(root.right, res);} } 复杂度分析 时间复杂度O(n)其中 n 为二叉树节点的个数。二叉树的遍历中每个节点会被访问一次且只会被访问一次。 空间复杂度O(n)。空间复杂度取决于递归的栈深度而栈深度在二叉树为一条链的情况下会达到 O(n) 的级别 迭代方式 class Solution {public ListInteger inorderTraversal(TreeNode root) {ListInteger res new ArrayListInteger();StackTreeNode stack new Stack();while (root ! null || !stack.isEmpty()) {while (root ! null) {stack.push(root);root root.left;}root stack.pop();res.add(root.val);root root.right;}return res;} }子循环中root遍历到root左子树最深层次过程中依次将左结点压栈左结点为空退出子循环将栈顶元素出栈 rootroot.right重新进入大循环既可遍历该树所有结点。 时间复杂度O(n)其中 n 为二叉树节点的个数。二叉树的遍历中每个节点会被访问一次且只会被访问一次。 空间复杂度O(n)。空间复杂度取决于栈深度而栈深度在二叉树为一条链的情况下会达到 O(n) 的级别。  3、后序遍历 递归方式 定义 postorder(root) 表示当前遍历到 root 节点的答案。按照定义我们只要递归调用 postorder(root-left) 来遍历 root 节点的左子树然后递归调用 postorder(root-right) 来遍历 root 节点的右子树最后将 root 节点的值加入答案即可递归终止的条件为碰到空节点。 class Solution {public ListInteger postorderTraversal(TreeNode root) {ListInteger res new ArrayListInteger();postorder(root, res);return res;}public void postorder(TreeNode root, ListInteger res) {if (root null) {return;}postorder(root.left, res);postorder(root.right, res);res.add(root.val);} }复杂度分析 时间复杂度O(n)其中 n 是二叉搜索树的节点数。每一个节点恰好被遍历一次。 空间复杂度O(n)为递归过程中栈的开销平均情况下为 O(logn)最坏情况下树呈现链状为 O(n)。 迭代方式 我们也可以用迭代的方式实现方法一的递归函数两种方式是等价的区别在于递归的时候隐式地维护了一个栈而我们在迭代的时候需要显式地将这个栈模拟出来其余的实现与细节都相同具体可以参考下面的代码(为了更好的注释代码放入块引用中) class Solution {     public ListInteger postorderTraversal(TreeNode root) {         ListInteger res new ArrayListInteger();         if (root null) {             return res;         }         Stack TreeNode stack new Stack();         TreeNode prev null;         while (root ! null || !stack.isEmpty()) {             while (root ! null) {                 stack.push(root);                 root root.left;             }             root stack.peek();//  取栈顶元素 //因为是后序遍历当前结点有无右结点决定它是否打印 //所以取出栈顶元素判断有无右结点          //而打印当前结点情况分为两种1、该结点无右结点  2、该结点的右结点已遍历       if (root.right null || root.right prev) {                 res.add(root.val);                 stack.pop();                 prev root;//用prev指向root表示已被遍历                 root null;             } else                  root root.right;         }         return res;     } } 如上图情况若if条件语句不判断 D.right ( K )是否被上次遍历则会陷入K出栈压栈无限循环中 复杂度分析  时间复杂度O(n)其中 n 是二叉搜索树的节点数。每一个节点恰好被遍历一次。 空间复杂度O(n)为迭代过程中显式栈的开销平均情况下为 O(logn)最坏情况下树呈现链状为 O(n)。 4、层序遍历 即逐层地从左到右访问所有节点。 递归方式 class Solution {ListListInteger resultnew ArrayList();public ListListInteger levelOrder(TreeNode root) {order(root,0);return result;}public void order(TreeNode node,int deep){if(nodenull)return;deep;if(result.size()deep){ListInteger itemnew ArrayList();result.add(item);}result.get(deep-1).add(node.val);order(node.left,deep);order(node.right,deep);} } 在方法void order(TreeNode node,int deep) 传相应的结点和二维数组下标设置节点对应位置 加图理解  时间复杂度O(n)  迭代方式  代码设计重点出栈既遍历。在结点出栈时同时将不为空的左右结点入栈。进入子循环前用size记录栈内元素进入子循环后依次将栈顶元素弹出同时将不为空的左右结点入size-- class Solution {public ListListInteger levelOrder(TreeNode root) {ListListInteger resnew ArrayList();if(rootnull)return res;QueueTreeNode queuenew LinkedList();queue.offer(root);while(!queue.isEmpty()){int sizequeue.size();ListInteger listnew ArrayList();while(size--!0){TreeNode topqueue.poll();list.add(top.val);if(top.left!null)queue.offer(top.left);if(top.right!null)queue.offer(top.right);}res.add(list);}return res;} } 时间复杂度O(n) 二叉树的遍历结束
http://www.w-s-a.com/news/953725/

相关文章:

  • 免费建设网站赚钱小程序开发文档pdf
  • ucenter 整合两个数据库网站网店推广技巧
  • 网站优化排名提升百度wap
  • 八里河风景区网站建设内容摘要网站开发基础学习
  • 上海做外贸网站的公司智慧团建网站登陆平台
  • 上海商务网站建设如何做的网站手机可以用吗
  • 产品推广营销方案seo推广员招聘
  • 做水利网站需要多少钱山东市网站建设
  • 做网站找哪里如何修改wordpress颜色
  • 招商加盟网站系统站长工具 seo查询
  • 工商局网站清算组备案怎么做电商培训机构
  • 做好门户网站建设做本地团购网站怎么样
  • wordpress主题和预览不同20条优化防疫措施方案
  • 艾奇视觉网站建设网站推广需要几个人做
  • 2008 iis 添加网站wordpress固定链接标签加上页面
  • 宁波企业网站制作推荐网站优化人员
  • 大型资讯门户网站怎么做排名沈阳建设工程有限公司
  • 开发中英文切换网站如何做江苏网站建设费用
  • 网站论文首页布局技巧桥东网站建设
  • 网站开发项目经理工资北京微信网站
  • 山西山西省建设厅网站微信备份如何转换为wordpress
  • 同城网站开发实用网站模板
  • 郑州做网站哪家公司好国外购买空间的网站有哪些
  • 资讯cms网站有那些餐饮品牌策划设计公司
  • 网站策划选题网站布局优化
  • 网站建设3000字wordpress 微信 主题制作
  • 代做寄生虫网站网站菜单效果
  • 网站备案为什么这么慢目录更新 wordpress
  • 视频在线制作网站Wordpress 外链图片6
  • 网站域名后缀有什么用网站建设的投资预算怎么写