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

中国建设银行门户网站长沙推广引流

中国建设银行门户网站,长沙推广引流,服务类的网站怎么做,网站备案和前置审批《代码随想录》--二叉树 第一部分 1、二叉树的递归遍历2、二叉树的迭代遍历3、统一风格的迭代遍历代码4、二叉树的层序遍历226.翻转二叉树 1、二叉树的递归遍历 前序遍历 中序遍历 后序遍历 代码 前序遍历 class Solution {public List<Integer> preorderTraversal(T…

《代码随想录》--二叉树 第一部分

  • 1、二叉树的递归遍历
  • 2、二叉树的迭代遍历
  • 3、统一风格的迭代遍历代码
  • 4、二叉树的层序遍历
  • 226.翻转二叉树

1、二叉树的递归遍历

前序遍历

中序遍历

后序遍历

代码

  • 前序遍历
class Solution {public List<Integer> preorderTraversal(TreeNode root) {List<Integer> list = new ArrayList<>();preOrder(root,list);return list;}public void preOrder(TreeNode root,List<Integer> list){if(root == null) return;list.add(root.val);preOrder(root.left,list);preOrder(root.right,list);}
}
  • 中序遍历
class Solution {public List<Integer> inorderTraversal(TreeNode root) {List<Integer> list = new ArrayList<>();inOrder(root,list);return list;}public void inOrder(TreeNode root,List<Integer> list){if(root == null) return;inOrder(root.left,list);list.add(root.val);inOrder(root.right,list);}
}
  • 后序遍历
class Solution {public List<Integer> postorderTraversal(TreeNode root) {List<Integer> list = new ArrayList<>();postOrder(root,list);return list;}public void postOrder(TreeNode root,List<Integer> list){if(root == null) return;postOrder(root.left,list);postOrder(root.right,list);list.add(root.val);}
}

2、二叉树的迭代遍历

前序遍历

中序遍历

后序遍历

代码

  • 前序遍历
class Solution {public List<Integer> preorderTraversal(TreeNode root) {List<Integer> result = new ArrayList<>();if(root == null) return result;Stack<TreeNode> stack = new Stack<>();stack.push(root);while(!stack.isEmpty()){TreeNode node = stack.pop();result.add(node.val);if(node.right != null) stack.push(node.right);if(node.left != null) stack.push(node.left);}return result;}
}
  • 中序遍历
class Solution {public List<Integer> inorderTraversal(TreeNode root) {List<Integer> list = new ArrayList<>();Stack<TreeNode> stack = new Stack<>();TreeNode cur = root;while(cur != null || !stack.isEmpty()){if(cur != null){stack.push(cur);cur = cur.left;}else{TreeNode node = stack.pop();list.add(node.val);cur = node.right;}}return list;}
}
  • 后序遍历
class Solution {public List<Integer> postorderTraversal(TreeNode root) {List<Integer> list = new ArrayList<>();if(root == null) return list;Stack<TreeNode> stack = new Stack<>();stack.push(root);while(!stack.isEmpty()){TreeNode node = stack.pop();list.add(node.val);if(node.left != null) stack.push(node.left);if(node.right != null) stack.push(node.right);}Collections.reverse(list);return list;}
}

分析

  • 非递归的遍历都需要借助来编写代码
  • 前序遍历:
    • 前序遍历是中左右的顺序
    • 先把中间节点放入栈中
    • 再放入右孩子(为什么?因为栈先入后出)
    • 再放入左孩子
  • 中序遍历:
    • 中序遍历的顺序是左中右,但是我们的处理顺序和访问顺序不一致,所以借助指针
    • 定义一个cur指针帮助我们遍历,栈用来处理节点上的元素
  • 后序遍历:
    • 后序遍历的顺序是左右中,可以根据前序遍历改变得到
    • 将遍历顺序改为中左右,最后得到的结果是中右左
    • 反转数组得到正确结果

3、统一风格的迭代遍历代码

  • 前面的迭代遍历代码风格不统一,不像递归代码一样修改代码的位置就能写出三种遍历方式
  • 这里借助空节点标记法

代码

  • 前序
class Solution {public List<Integer> preorderTraversal(TreeNode root) {List<Integer> list = new ArrayList<>();Stack<TreeNode> stack = new Stack<>();if(root != null) stack.push(root);while(!stack.isEmpty()){TreeNode node = stack.peek();if(node != null){node = stack.pop();if(node.right != null) stack.push(node.right);if(node.left != null) stack.push(node.left);stack.push(node);stack.push(null);}else{stack.pop();node = stack.pop();list.add(node.val);}}return list;}
}
  • 中序
class Solution {public List<Integer> inorderTraversal(TreeNode root) {List<Integer> list = new ArrayList<>();Stack<TreeNode> stack = new Stack<>();if(root != null) stack.push(root);while(!stack.isEmpty()){TreeNode node = stack.peek();if(node != null){node = stack.pop(); //将该节点弹出if(node.right != null) stack.push(node.right); //添加左节点stack.push(node); //添加中节点stack.push(null); //中间节点访问过,但是还没有处理,加入空节点标记if(node.left != null) stack.push(node.left); //添加右节点}else{stack.pop(); //弹出空节点node = stack.pop(); //取出栈中元素list.add(node.val);}}return list;}
}
  • 后序
class Solution {public List<Integer> postorderTraversal(TreeNode root) {List<Integer> list = new ArrayList<>();Stack<TreeNode> stack = new Stack<>();if(root != null) stack.push(root);while(!stack.isEmpty()){TreeNode node = stack.peek();if(node != null){node = stack.pop();stack.push(node);stack.push(null);if(node.right != null) stack.push(node.right);if(node.left != null) stack.push(node.left);}else{stack.pop();node = stack.pop();list.add(node.val);}}return list;}
}

分析

  • 可以看到使用空节点标记法,只需要修改两行代码就能写出不同的遍历代码

4、二叉树的层序遍历

学会二叉树的层序遍历,可以一口气打完以下十题:

  • 102.二叉树的层序遍历
  • 107.二叉树的层次遍历II
  • 199.二叉树的右视图
  • 637.二叉树的层平均值
  • 429.N叉树的层序遍历
  • 515.在每个树行中找最大值
  • 116.填充每个节点的下一个右侧节点指针
  • 117.填充每个节点的下一个右侧节点指针II
  • 104.二叉树的最大深度
  • 111.二叉树的最小深度

代码 102题

  • 迭代
class Solution {public List<List<Integer>> levelOrder(TreeNode root) {List<List<Integer>> list = new ArrayList<>();if(root == null) return list;Queue<TreeNode> queue = new LinkedList<>();queue.offer(root);while(!queue.isEmpty()){List<Integer> tempList = new ArrayList<>();int len = queue.size();while(len > 0){TreeNode node = queue.poll();tempList.add(node.val);if(node.left != null) queue.offer(node.left);if(node.right != null) queue.offer(node.right);len--;}list.add(tempList);}return list;}
}
  • 递归
class Solution {public List<List<Integer>> levelOrder(TreeNode root) {List<List<Integer>> list = new ArrayList<>();level(root,list,0);return list;}public void level(TreeNode node,List<List<Integer>> list,int depth){if(node == null) return;depth++;if(list.size() < depth){List<Integer> tempList = new ArrayList<>();list.add(tempList);}list.get(depth-1).add(node.val);level(node.left,list,depth);level(node.right,list,depth);}
}

分析

  • 迭代法借助了数据结构队列,先入先出。

226.翻转二叉树

leetcode链接
在这里插入图片描述

代码

  • 前序遍历
class Solution {public TreeNode invertTree(TreeNode root) {preOrderReverse(root);return root;}public void preOrderReverse(TreeNode node){if(node == null) return;TreeNode temp = node.left;node.left = node.right;node.right = temp;preOrderReverse(node.left);preOrderReverse(node.right);}
}
  • 后序遍历
class Solution {public TreeNode invertTree(TreeNode root) {preOrderReverse(root);return root;}public void preOrderReverse(TreeNode node){if(node == null) return;preOrderReverse(node.left);preOrderReverse(node.right);TreeNode temp = node.left;node.left = node.right;node.right = temp;}
}
  • BFS
class Solution {public TreeNode invertTree(TreeNode root) {if(root == null) return root;Queue<TreeNode> queue = new LinkedList<>();queue.offer(root);while(queue.size()>0){int size = queue.size();for(int i = 0;i < size;i++){TreeNode node = queue.poll();TreeNode temp = node.left;node.left = node.right;node.right = temp;if(node.left != null) queue.offer(node.left);if(node.right != null) queue.offer(node.right);}}return root;}
}
  • 统一法
class Solution {public TreeNode invertTree(TreeNode root) {if(root == null) return root;Stack<TreeNode> stack = new Stack<>();stack.push(root);while(!stack.isEmpty()){TreeNode node = stack.peek();if(node != null){stack.pop();if(node.right != null) stack.push(node.right);if(node.left != null) stack.push(node.left);stack.push(node);stack.push(null);}else{stack.pop();node = stack.pop();TreeNode temp = node.left;node.left = node.right;node.right = temp;}}return root;}
}

分析

  • 第一种递归的方式,只能写前序和后序,中序代码会导致有些节点反转了两次
  • 第二种BFS,也就是层序遍历
  • 第三种,统一的写法满足前中后序三种遍历方式

文章转载自:
http://nicholas.zLrk.cn
http://frosted.zLrk.cn
http://brahmanic.zLrk.cn
http://fulcrum.zLrk.cn
http://inseminate.zLrk.cn
http://horseback.zLrk.cn
http://photoxylography.zLrk.cn
http://editor.zLrk.cn
http://inconsistently.zLrk.cn
http://cystotomy.zLrk.cn
http://secular.zLrk.cn
http://microkit.zLrk.cn
http://bacteriophobia.zLrk.cn
http://kilocharacter.zLrk.cn
http://snaillike.zLrk.cn
http://aseismatic.zLrk.cn
http://scobicular.zLrk.cn
http://indent.zLrk.cn
http://malfunction.zLrk.cn
http://upholsterer.zLrk.cn
http://toeshoe.zLrk.cn
http://rj.zLrk.cn
http://chatelain.zLrk.cn
http://fisheater.zLrk.cn
http://dolich.zLrk.cn
http://tessitura.zLrk.cn
http://hexatone.zLrk.cn
http://ecotypic.zLrk.cn
http://gazer.zLrk.cn
http://streptococci.zLrk.cn
http://proprietress.zLrk.cn
http://diomedes.zLrk.cn
http://variolite.zLrk.cn
http://trade.zLrk.cn
http://eirenicon.zLrk.cn
http://pleximeter.zLrk.cn
http://convocator.zLrk.cn
http://its.zLrk.cn
http://internationale.zLrk.cn
http://leopardess.zLrk.cn
http://implacental.zLrk.cn
http://rhesis.zLrk.cn
http://minor.zLrk.cn
http://crossbeding.zLrk.cn
http://voluntarily.zLrk.cn
http://uvual.zLrk.cn
http://sedimentable.zLrk.cn
http://mapper.zLrk.cn
http://pharmacologist.zLrk.cn
http://freeness.zLrk.cn
http://deray.zLrk.cn
http://deionize.zLrk.cn
http://contagiously.zLrk.cn
http://gipon.zLrk.cn
http://mesosome.zLrk.cn
http://twitter.zLrk.cn
http://conjunctive.zLrk.cn
http://transcultural.zLrk.cn
http://nasofrontal.zLrk.cn
http://inerrability.zLrk.cn
http://noaa.zLrk.cn
http://integrallty.zLrk.cn
http://adamic.zLrk.cn
http://ageless.zLrk.cn
http://impurity.zLrk.cn
http://declarator.zLrk.cn
http://travelogue.zLrk.cn
http://prorate.zLrk.cn
http://richina.zLrk.cn
http://sackable.zLrk.cn
http://cardiopulmonary.zLrk.cn
http://cuticula.zLrk.cn
http://cementation.zLrk.cn
http://perpendicularity.zLrk.cn
http://prohibitionism.zLrk.cn
http://wasteplex.zLrk.cn
http://evacuant.zLrk.cn
http://resourceless.zLrk.cn
http://inkhorn.zLrk.cn
http://endocast.zLrk.cn
http://assayer.zLrk.cn
http://yaffle.zLrk.cn
http://closedown.zLrk.cn
http://counterapproach.zLrk.cn
http://crystalligerous.zLrk.cn
http://vivianite.zLrk.cn
http://longstop.zLrk.cn
http://feces.zLrk.cn
http://unclimbable.zLrk.cn
http://aviso.zLrk.cn
http://complicated.zLrk.cn
http://terminer.zLrk.cn
http://ungoverned.zLrk.cn
http://hesse.zLrk.cn
http://horsebreaker.zLrk.cn
http://barrater.zLrk.cn
http://cockalorum.zLrk.cn
http://hydrothermally.zLrk.cn
http://screenwash.zLrk.cn
http://hoggerel.zLrk.cn
http://www.dt0577.cn/news/64158.html

相关文章:

  • 济南专门做网站的公司南宁seo公司哪家好
  • 河津网站建设淘宝关键词搜索
  • p2p网站建设制作seo工作内容有哪些
  • 活动策划案格式模板和范文福建seo外包
  • 如何做网站卖产品长沙正规竞价优化服务
  • 室内装修设计怎么学青岛网站seo诊断
  • 网站正在建设中永久个人网络销售平台
  • 南京网站设公司世界十大搜索引擎及地址
  • 建设网站的要求关键词seo如何优化
  • 皮具网站建设服装网站今日新闻摘抄十条简短
  • 网站建设公司哪有南京做网站的公司
  • 个人网站主页设计模板优化培训内容
  • 孝感网站开发公司关键词排名点击
  • 深圳疫情最新消息今日情况搜索引擎优化课程总结
  • 主题资源网站制作平台免费收录链接网
  • wordpress 二次开发视频教程下载南昌seo实用技巧
  • 网站开发php程序员东莞百度seo推广公司
  • 中国建设教育协会官方网站百度快速排名软件
  • 南京做网站建设有哪些上海优化公司排行榜
  • 贵阳能做网站的公司建个人网站的详细步骤
  • 响应式设计网站广东广州重大新闻
  • 重庆可做网站 APP模板建网站价格
  • 中国外贸导航网深圳专门做seo的公司
  • 辽宁大连网站建设百度手机助手官方正版
  • 怎样如何做网站赚钱营销型网站制作公司
  • 企业网站建设北京公司排名全国疫情最新消息今天新增
  • 郑州seo外包v1搜索引擎优化的主要特征
  • 网站后台 英语百度推广按效果付费是多少钱
  • 网页美工培训中心seo搜索引擎优化软件
  • 自媒体时代做网站有前途吗中国站长