二叉树本身固有的递归性质,通常可以用递归算法解决,虽然递归代码简介,但是性能不如非递归算法。

常用的操作是构建二叉树、遍历二叉树(先序、中序、后序、都属于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 level
while(start<nodeList.size()){
last = nodeList.size();//update the last value of the new level
List<Integer> tempList = new ArrayList<Integer>(); //store the node data in every level
while(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; }
}

java 容器、二叉树操作、107的更多相关文章

  1. Java 容器:Collection 初探之 List

    1 ///: JavaBasic//com.cnblogs.pattywgm.day1//CollectionTest.java 2 3 package com.cnblogs.pattywgm.da ...

  2. Java容器的常见问题

    记录Java容器中的常见概念和原理 参考: https://github.com/wangzhiwubigdata/God-Of-BigData#三Java并发容器 https://blog.csdn ...

  3. Java 容器系列总结

    为什么要使用集合 当我们需要保存一组类型相同的数据的时候,我们应该是用一个容器来保存,这个容器就是数组,但是,使用数组存储对象具有一定的弊端, 因为我们在实际开发中,存储的数据的类型是多种多样的,于是 ...

  4. 备战-Java 容器

    备战-Java 容器 玉阶生白露,夜久侵罗袜. 简介:备战-Java 容器 一.概述 容器主要包括 Collection 和 Map 两种,Collection 存储着对象的集合,而 Map 存储着k ...

  5. 【Java心得总结六】Java容器中——Collection

    在[Java心得总结五]Java容器上——容器初探这篇博文中,我对Java容器类库从一个整体的偏向于宏观的角度初步认识了Java容器类库.而在这篇博文中,我想着重对容器类库中的Collection容器 ...

  6. 【Java心得总结五】Java容器上——容器初探

    在数学中我们有集合的概念,所谓的一个集合,就是将数个对象归类而分成为一个或数个形态各异的大小整体. 一般来讲,集合是具有某种特性的事物的整体,或是一些确认对象的汇集.构成集合的事物或对象称作元素或是成 ...

  7. Java 容器(list, set, map)

    java容器类库的简化图: (虚线框表示接口, 实线框表示普通的类, 空心箭头表示特定的类实现了接口, 实心箭头表示某个类可以生成箭头所指的类对象) 继承Collection的主要有Set 和 Lis ...

  8. Java - 容器详解

    一.ArrayList 长度可变数组,类似于c++ STL中的vector. 元素以线性方式连续存储,内部允许存放重复元素. 允许对元素进行随机的快速访问,但是向ArrayList中插入和删除元素的速 ...

  9. java容器---集合总结

    思考为什么要引入容器这个概念? Java有多种方式保存对象(应该是对象的引用),例如使用数组时保存一组对象中的最有效的方式,如果你想保存一组基本类型的数据,也推荐使用这种方式,但大家知道数组是具有固定 ...

随机推荐

  1. dev GridControl直接打印 纵向合并单元格

    GridControl纵向合并单元格 只需设置 gridView->OptionView->AllowCellMerge=true; 效果 提示: 精确到列 前提是gridview1已经允 ...

  2. Nginx代理外网映射

    外网映射内网端口8080, 外网访问使用端口8379: nginx监听8080和80端口 #user nobody; worker_processes ; #error_log logs/error. ...

  3. storm的并发

    1 storm并行的基本概念 storm集群中的一个机器可以运行一个或者多个worker,对应于一个或者多个topologies. 1个worker进程运行1个或多个excutor线程.每个worke ...

  4. decompile elf

    no way, try,objdump --disassemble <elf file>

  5. VI中的批量替换 (转载)

      1) 文件内全部替换:   :%s#abc#123#g (如文件内有#,可用/替换,:%s/abc/123/g)   --注:把abc替换成123   (或者: %s/str1/str2/g 用s ...

  6. 转 oracle 开发 第03章 sqlplus

    目录 1.查看表结构 desc 2.编辑SQL语句 append.list.change.run 3.保存.检索并运行文件 save.get.start.edit.spool 4.格式化列 colum ...

  7. 【第k小素数 】 打表问题

    Prime Number TimeLimit: 1 Second MemoryLimit: 32 Megabyte Totalsubmit: 399 Accepted: 88 Description ...

  8. HDOJ 1319 Prime Cuts<数论>

    学会了不难.通过这道题学习了两点: 1:筛选法求素数. 2:在写比较长的程序的时候,给每个功能部分加上注释,思路会更清晰. 题意: 1.题目中所说的素数并不是真正的素数,包括1: 2.需要读懂题意,对 ...

  9. 环境:win7+ie8 IE8的F12不起作用,原因如下:

    1.先按下F12 2.再按下CTL+P,此时调试框将出现在屏幕下方. 3.再次点击CTL+P 4.此时在任务栏上的到IE8的图标,将会看到调试框,右击最大化,此时调试框是最大化状态. 5.然后再慢慢的 ...

  10. 使用自定义的BaseAdapter实现LIstView的展示(转)

    使用自定义的BaseAdapter实现LIstView的展示 原文链接 http://stephen830.iteye.com/blog/1141394 使用自定义的BaseAdapter实现LIst ...