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

常用的操作是构建二叉树、遍历二叉树(先序、中序、后序、都属于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相关推荐

  1. java 实现二叉树操作

    java实现二叉树的创建.先序遍历.中序遍历.后序遍历及二叉树的深度 public class Tree { private int data;// 数据节点  private Tree left;/ ...

  2. 后端学习 - Java容器

    文章目录 一 简介 二 底层数据结构总结 1 List 2 Set 3 Queue 4 Map 三 Collection 的子接口 List 1 ArrayList 与 Vector 2 ArrayL ...

  3. java compareto方法怎么排序的_很简单却能让你面试头疼得Java容器,这里从源码给你解释清楚

    之前在整理Redis的五大数据结构的时候,其中提到了list.set等知识点的时候,就想起来刚上大学那会的青涩时光,抱着一本Java生啃得时候得傻样,跟女朋友交流的时候,她说那你怎么不也顺便整理一下啊 ...

  4. docker 删除所有未启动的容器_Docker 镜像容器常用操作(让我们用 docker 溜得飞起)...

    推荐阅读: 面试字节跳动三轮凉凉,内推4面终拿下抖音offer(Java后台研发)​zhuanlan.zhihu.com 一线架构师Spring boot 学习笔记:我的成长全记在这份PDF文档里​z ...

  5. Java知识点总结(Java容器-EnumSet)

    Java知识点总结(Java容器-EnumSet) @(Java知识点总结)[Java, Java容器, JavaCollection, JavaSet] EnumSet EnumSet是一个专为枚举 ...

  6. Java 容器学习之 HashMap

    前言 把 Java 容器的学习笔记放到 github 里了,还在更新~ 其他的目前不打算抽出来作为文章写,感觉挖的还不够深,等对某些东西理解的更深了再写文章吧 Java 容器 目录如下: Java 容 ...

  7. java计算二叉树的节点最小值_java计算二叉树的高度以及叶节点个数

    java实现二叉树的相关操作 代码如下 package 二叉树有关; import java.util.ArrayDeque; import java.util.Queue; public class ...

  8. list容器java_【Java容器】List容器使用方法及源码分析

    List容器 ArrayList:使用动态数组保存元素,支持随机访问. Vector:与ArrayList类似,但是它是线程安全的. LinkedList:使用双向链表保存元素,只能顺序访问,此外可以 ...

  9. docker和java容器_使用Docker容器和Java EE进行持续交付

    docker和java容器 组织需要一种使应用程序交付快速,可预测和安全的方法,而诸如docker之类的容器所提供的敏捷性则可以帮助开发人员实现这一目标. 对于Java EE应用程序,这可以在容器中打 ...

最新文章

  1. 用matlab编辑器打开.m文件
  2. Clojure入门指南(Getting Started)
  3. 6.Mybatis中的动态Sql和Sql片段(Mybatis的一个核心)
  4. 51NOD 1138 连续整数的和
  5. js 20160810
  6. Anaconda中下载速度贼慢?
  7. JavaScript 操作 HTML DOM (文档对象模型) 相关知识点
  8. 简单暴力到dp的优化(中级篇)
  9. centos6 mysql 启动_【17-02-18】 【求助】centos6 mysql重启后无法正常启动
  10. 机器学习中的数学(七)--凸优化的基础知识
  11. 二分答案——跳石头(洛谷 P2678)
  12. PyTorch 靠谱的模型可视化教程
  13. linux下安装在线mysql,嵌入式 Linux下安装Mysql离线和在线安装
  14. php 5.4 +iis+mysql_IIS+FastCGI+PHP5.4.4搭建PHP环境
  15. Linux下搭建iSCSI共享存储
  16. 服务器系统启用flash,如何在Windows Server 2016中启用Adobe Flash Player
  17. rational rose 2007安装破解全过程
  18. 华硕eeepc 1201N 开启AHCI
  19. DirectD3D-光照和材质
  20. 广东工业大学 Anyviewce C语言 习题七

热门文章

  1. 一个失败项目的复盘会
  2. 3变量程序_PLC的程序结构及其特点
  3. python读文件和写文件-python开发--从文件中读取数据和写入文件
  4. 神策数据王琛:用户画像实践之神策标签生产引擎架构
  5. 恭喜神策数据客户即刻完成 C 轮融资
  6. What every programmer needs to know about game networking
  7. 用javascript判断当前是安卓平台还是ios平台
  8. hdu 2441(ACM(Array Complicated Manipulation))
  9. 通过php extension使disable_function支持通配符
  10. Spread for Windows Forms快速入门(2)---设置Spread表单