java 容器、二叉树操作、107
二叉树本身固有的递归性质,通常可以用递归算法解决,虽然递归代码简介,但是性能不如非递归算法。
常用的操作是构建二叉树、遍历二叉树(先序、中序、后序、都属于DFS深度优先搜索算法,使用栈来实现),广度优先BFS使用队列来遍历。
参考博客:
链表、二叉树操作、深度优先、广度优先的算法
注意:
这个图里面虚点框代表的是接口,虚线框代表的是抽象类,实线框代表的实现了接口或者继承了抽象类的类,加粗的实线框代表的是常用类:HashMap、HashSet、ArrayList、LinkedList,这张图没有给出Queue的实现,
可以看到LinkedList是Deque的实现类,所以to sum up,各种栈、队列的接口实现都可以找LinkedList,只是不同的接口都有不同的方法。
下面看leetcode的题目:
【107】Binary Tree Level Order Traversal II
Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left to right, level by level from leaf to root).
For example:
Given binary tree {3,9,20,#,#,15,7}
,
3/ \9 20/ \15 7
return its bottom-up level order traversal as:
[[15,7],[9,20],[3] ] 思路:其实是层序遍历二叉树,编程之美上有这个,其实也就是 BFS,如果使用队列来实现的话,会超时,编程之美上用的vector,所以用一般的动态数组就可以了。
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(int x) { val = x; }* }*///It's an iterative way by two "while circles" to travesal every level of the tree, BFS actually, u can use queue to do it ,but it seems time will exceed public class Solution {public List<List<Integer>> levelOrderBottom(TreeNode root) {List<List<Integer>> nodeData = new ArrayList<List<Integer>>();if(root==null)return nodeData;List<TreeNode> nodeList = new ArrayList<TreeNode>();nodeList.add(root);int start = 0;int last = 1; //value 1 is for the 0 levelwhile(start<nodeList.size()){last = nodeList.size();//update the last value of the new levelList<Integer> tempList = new ArrayList<Integer>(); //store the node data in every levelwhile(start < last){TreeNode tempNode = (TreeNode)nodeList.get(start);if(tempNode!=null)tempList.add(tempNode.val);if(tempNode.left!=null)nodeList.add(tempNode.left);if(tempNode.right!=null)nodeList.add(tempNode.right);start++;} nodeData.add(0,tempList);}return nodeData;} }
转载于:https://www.cnblogs.com/lucky-star-star/p/5043804.html
java 容器、二叉树操作、107相关推荐
- java 实现二叉树操作
java实现二叉树的创建.先序遍历.中序遍历.后序遍历及二叉树的深度 public class Tree { private int data;// 数据节点 private Tree left;/ ...
- 后端学习 - Java容器
文章目录 一 简介 二 底层数据结构总结 1 List 2 Set 3 Queue 4 Map 三 Collection 的子接口 List 1 ArrayList 与 Vector 2 ArrayL ...
- java compareto方法怎么排序的_很简单却能让你面试头疼得Java容器,这里从源码给你解释清楚
之前在整理Redis的五大数据结构的时候,其中提到了list.set等知识点的时候,就想起来刚上大学那会的青涩时光,抱着一本Java生啃得时候得傻样,跟女朋友交流的时候,她说那你怎么不也顺便整理一下啊 ...
- docker 删除所有未启动的容器_Docker 镜像容器常用操作(让我们用 docker 溜得飞起)...
推荐阅读: 面试字节跳动三轮凉凉,内推4面终拿下抖音offer(Java后台研发)zhuanlan.zhihu.com 一线架构师Spring boot 学习笔记:我的成长全记在这份PDF文档里z ...
- Java知识点总结(Java容器-EnumSet)
Java知识点总结(Java容器-EnumSet) @(Java知识点总结)[Java, Java容器, JavaCollection, JavaSet] EnumSet EnumSet是一个专为枚举 ...
- Java 容器学习之 HashMap
前言 把 Java 容器的学习笔记放到 github 里了,还在更新~ 其他的目前不打算抽出来作为文章写,感觉挖的还不够深,等对某些东西理解的更深了再写文章吧 Java 容器 目录如下: Java 容 ...
- java计算二叉树的节点最小值_java计算二叉树的高度以及叶节点个数
java实现二叉树的相关操作 代码如下 package 二叉树有关; import java.util.ArrayDeque; import java.util.Queue; public class ...
- list容器java_【Java容器】List容器使用方法及源码分析
List容器 ArrayList:使用动态数组保存元素,支持随机访问. Vector:与ArrayList类似,但是它是线程安全的. LinkedList:使用双向链表保存元素,只能顺序访问,此外可以 ...
- docker和java容器_使用Docker容器和Java EE进行持续交付
docker和java容器 组织需要一种使应用程序交付快速,可预测和安全的方法,而诸如docker之类的容器所提供的敏捷性则可以帮助开发人员实现这一目标. 对于Java EE应用程序,这可以在容器中打 ...
最新文章
- 用matlab编辑器打开.m文件
- Clojure入门指南(Getting Started)
- 6.Mybatis中的动态Sql和Sql片段(Mybatis的一个核心)
- 51NOD 1138 连续整数的和
- js 20160810
- Anaconda中下载速度贼慢?
- JavaScript 操作 HTML DOM (文档对象模型) 相关知识点
- 简单暴力到dp的优化(中级篇)
- centos6 mysql 启动_【17-02-18】 【求助】centos6 mysql重启后无法正常启动
- 机器学习中的数学(七)--凸优化的基础知识
- 二分答案——跳石头(洛谷 P2678)
- PyTorch 靠谱的模型可视化教程
- linux下安装在线mysql,嵌入式 Linux下安装Mysql离线和在线安装
- php 5.4 +iis+mysql_IIS+FastCGI+PHP5.4.4搭建PHP环境
- Linux下搭建iSCSI共享存储
- 服务器系统启用flash,如何在Windows Server 2016中启用Adobe Flash Player
- rational rose 2007安装破解全过程
- 华硕eeepc 1201N 开启AHCI
- DirectD3D-光照和材质
- 广东工业大学 Anyviewce C语言 习题七
热门文章
- 一个失败项目的复盘会
- 3变量程序_PLC的程序结构及其特点
- python读文件和写文件-python开发--从文件中读取数据和写入文件
- 神策数据王琛:用户画像实践之神策标签生产引擎架构
- 恭喜神策数据客户即刻完成 C 轮融资
- What every programmer needs to know about game networking
- 用javascript判断当前是安卓平台还是ios平台
- hdu 2441(ACM(Array Complicated Manipulation))
- 通过php extension使disable_function支持通配符
- Spread for Windows Forms快速入门(2)---设置Spread表单