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

个人网站可以做哪些主题在百度怎么创建自己的网站

个人网站可以做哪些主题,在百度怎么创建自己的网站,WordPress太臃肿了,公司员工培训内容有哪些题目描述 从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回其层次遍历结果: [3,9,20,15,7] 提示: 节…

    题目描述

从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。
例如:

给定二叉树: [3,9,20,null,null,15,7],

    3
   / \
  9  20
      /  \
   15   7
   
返回其层次遍历结果:

[3,9,20,15,7]

提示:

节点总数 <= 1000

   思路

     这个题目的意思很明确,就是从根节点开始,一层一层打印节点,而且节点顺序是从左到右。以上面示例为例,3为根节点,之后打印它的左右节点9,20,之后再打印20的子节点15,7。全部打印完成结束。

   这道题有点类似图算法中的广度优先搜索,先从顶端开始,依次遍历图的下一层节点,下一层节点遍历完成,接着遍历下下一层。仅仅依赖树结构的左右节点关系,然后递归遍历,我们无法得到最终结果,因为随着层数的增加,兄弟节点之间没有必然关系,他们无法保证从左到右来遍历。

    这里我们需要借助一个队列来存放遍历过的节点,这样,每遍历依次,后续的遍历,我们从队列开头取元素,这样就可以保证按照层级和左右顺序来打印树节点。

 代码

package com.xxx.example;import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;public class Offer32PrintTreeNode {private static TreeNode root;private static List<List<Integer>> nodeList = new ArrayList<>();public static void main(String[] args) {TreeNode treeNode = new TreeNode(3);TreeNode treeNode1 = new TreeNode(9);TreeNode treeNode2 = new TreeNode(20);TreeNode treeNode3 = new TreeNode(15);TreeNode treeNode4 = new TreeNode(7);root = treeNode;treeNode2.left = treeNode3;treeNode2.right = treeNode4;root.left = treeNode1;root.right = treeNode2;int[] result = levelOrder(root);for(int i=0;i<result.length;i++) {System.out.print(result[i] + " ");}System.out.println();}public static int[] levelOrder(TreeNode root) {if (root == null)return new int[0];Queue<TreeNode> queue = new LinkedList<>();ArrayList<Integer> list = new ArrayList<>();queue.add(root);while (!queue.isEmpty()) {TreeNode curNode = queue.poll();list.add(curNode.val);if (curNode.left != null)queue.add(curNode.left);if (curNode.right != null)queue.add(curNode.right);}return list.stream().mapToInt(Integer::intValue).toArray();}}class TreeNode {int val;TreeNode left;TreeNode right;TreeNode(int value) {this.val = value;this.left = null;this.right = null;}@Overridepublic String toString() {return val + "";}
}

    还有一种办法,其实就是利用深度优先搜索的思想解决,这个似乎有点玄妙,这里明明是要广度优先搜索,怎么还利用起深度优先搜索呢?其实是这样的,这里按照深度优先搜索,我们只是把搜到的数据打上标签,这个标签就是它的层次,也叫深度,每个深度的节点我们保存到同样深度的map映射里。最后,我们遍历map,得到所有按照层次组织的节点,这样就是从上到下,从左到右打印二叉树节点。 

深度优先搜索 


package com.xxx.tutorial;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class TreeNodeTraversal {private static Map<Integer, List<Integer>> map = new HashMap<>();private static int max = -1;private static int cnt = 0;public static void main(String[] args) {TreeNode node0 = new TreeNode(3);TreeNode node1 = new TreeNode(9);TreeNode node2 = new TreeNode(20);TreeNode node3 = new TreeNode(15);TreeNode node4 = new TreeNode(7);node0.left = node1;node0.right = node2;node2.left = node3;node2.right = node4;int[] res = traversal(node0);for (int i = 0; i < res.length; i++) {System.out.print(res[i] + " ");}System.out.println();}public static int[] traversal(TreeNode root) {dfs(root, 0);int[] ans = new int[cnt];for (int i = 0, idx = 0; i <= max; i++) {for (int x : map.get(i))ans[idx++] = x;}return ans;}public static void dfs(TreeNode node, int depth) {if (node == null) return;max = Math.max(max, depth);cnt++;dfs(node.left, depth + 1);List<Integer> list = map.getOrDefault(depth, new ArrayList<>());list.add(node.val);map.put(depth, list);dfs(node.right, depth + 1);}public static class TreeNode {int val;TreeNode left;TreeNode right;public TreeNode(int value) {this.val = value;this.left = null;this.right = null;}}
}

    这里通过递归调用,我们能遍历完所有节点,并按照深度层次保存各自深度的节点。 

    这个思路很巧妙,它利用深度层次来映射对应的节点,最后,我们遍历map映射得到所有节点,他们的顺序正好是从上到下,从左到右。

    剑指offer打印二叉树还有另一个题目,就是按照层次打印二叉树,就是[[3],[9,20],[15,7]],相信经过上面的深度优先搜索,大家也许有一些想法,这个代码或许简单改造一下就可以了。

http://www.yidumall.com/news/7070.html

相关文章:

  • 求职网站网页设计百度百家号怎么赚钱
  • 网站开发工程师薪资域名备案查询官网
  • 网站seo快速排名营销策划推广
  • 武汉网站开发培训班百度帐号登录入口
  • 网站防火墙咋样建设北京百度推广优化公司
  • 网站关停公告怎么做湖南专业关键词优化
  • 中国优秀网页设计seo网络优化培训
  • 做网站 深圳百度认证有什么用
  • 怎么做独立app网站长沙网站优化价格
  • vc 做网站源码谷歌站长平台
  • 如何做网站稳定客户保定百度seo公司
  • vs做网站搜索引擎营销有哪些方式
  • 政府网网站一般谁做的网络推广自学
  • 榆林网站建设熊掌号广告的六种广告形式
  • 潍坊网站做的好的公司快速排名网站
  • 梅州市住房和建设局网站品牌宣传推广策划方案
  • 网站文件服务器搜索风云榜入口
  • 有关网站建设的文章广州seo推广
  • 2016网站备案域名备案官网
  • 单位做网站有哪些公司网页设计模板
  • 音乐网站开发文档撰写模板建站abc网站
  • 一个阿里云怎么做两个网站新闻源
  • 湖南美食网站建设策划书seo在线教学
  • 律师事务所网站模板今日热搜头条
  • 中端网站建设百度工具seo
  • 个人网站建设流程百度一下你就知道官网
  • 怎样才能制做免费网站搜索风云排行榜
  • 四川建设行业网站有哪些有什么好的网站吗
  • 企业电子商务网站建设策划书推广引流平台app大全
  • 绍兴企业建站模板谷歌搜索广告