java 容器、二叉树操作、107
2015-12-13 22:40
537 查看
二叉树本身固有的递归性质,通常可以用递归算法解决,虽然递归代码简介,但是性能不如非递归算法。
常用的操作是构建二叉树、遍历二叉树(先序、中序、后序、都属于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
return its bottom-up level order traversal as:
常用的操作是构建二叉树、遍历二叉树(先序、中序、后序、都属于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; } }
相关文章推荐
- 【SSH进阶之路】Spring的AOP逐层深入——AOP的基本原理(六)
- Maven - 构建Struts2项目
- Maven - 构建Struts2项目
- Maven - 构建Struts2项目
- 【SSH进阶之路】Spring的AOP逐层深入——采用注解完成AOP(七)
- 【SSH进阶之路】一步步重构容器实现Spring框架——从一个简单的容器开始(八)
- 【SSH进阶之路】一步步重构容器实现Spring框架——解决容器对组件的“侵入式”管理的两种方案--主动查找和控制反转(九)
- 【SSH进阶之路】一步步重构容器实现Spring框架——配置文件+反射实现IoC容器(十)
- 多线程基础:两种常见的创建线程的方式
- 【SSH进阶之路】一步步重构容器实现Spring框架——彻底封装,实现简单灵活的Spring框架(十一)
- springmvc4.1+hibernate和jackson2.5的配置
- 【持久化框架】SpringMVC+Spring4+Mybatis3集成,开发简单Web项目+源码下载
- Struts2中OGNL
- java XSS防护
- Java连接SQL Server类MyDBase的实现
- 深入浅出JMS(四)--Spring和ActiveMQ整合的完整实例
- Java---字节输入,文件操作,病毒制造,请谨慎运行!
- Java---字节输入,文件操作,病毒制造,请谨慎运行!
- [javase学习笔记]-5.2 数组的内存分配及特点
- 使用Spring JDBC时遇到的Software caused connection abort: recv failed问题