513. Find Bottom Left Tree Value (vector & queue)
来源:互联网 发布:美容连锁软件 编辑:程序博客网 时间:2024/06/05 06:37
这道题要求二叉树最下边一层的最左边的节点,是一道比较简单的题。主要当作给Java练习了。
首先是第一个版本:主要思想就是从根节点开始,逐步求下一层的节点,并替换到nodes中。如果发现下一层的节点(用temp来临时存储)是空的,就说明到了最后一层。results来标记每一层最左边的节点,最后就是结果。
import java.util.*;class Solution { public int findBottomLeftValue(TreeNode root) { Vector<TreeNode> nodes = new Vector<TreeNode>(); Vector<TreeNode> temp = new Vector<TreeNode>(); TreeNode result = root; nodes.addElement(root); while(!nodes.isEmpty()) { for(TreeNode i : nodes) { if(i.left != null)temp.addElement(i.left); if(i.right != null)temp.addElement(i.right); } if(!temp.isEmpty())result = temp.elementAt(0); nodes.clear(); for(TreeNode i : temp){ nodes.addElement(i); } temp.clear(); } return result.val; }}
这段代码遇到的坑就是,vector之间的赋值,不可以直接像C++中的一样,比如两个vector a和b。要赋值的话在java中不可以是 a=b。因为这样的话,如果a被清空(clear函数),b也会被清空,所以要逐步的复制。这就额外增加的运行时间。
//这段代码显然很辣鸡,运行很慢,因为两个vector之间的复制需要时间。。
下面是一个稍微好一些的解决方法。这次我们只用一个queue来解决二叉树层次遍历的问题,这样不需要额外的复制,只要保证一层一层的循环就好。主要思想是遍历每一层的节点,同时把子节点添加到队列尾部,需要注意的是每一层遍历时,需要确定这一层有多少个节点,以确定for循环的次数。
import java.util.*;class Solution { public int findBottomLeftValue(TreeNode root) { Queue<TreeNode> q = new LinkedList<TreeNode>(); TreeNode result = root; q.offer(root); int number = 1; while(!q.isEmpty()) { int count = 0; result = q.peek(); for(int i = 0; i < number; i++) { TreeNode temp = q.poll(); if(temp.left != null) { q.offer(temp.left); count++; } if(temp.right != null) { q.offer(temp.right); count++; } } number = count; } return result.val; }}值得注意的是queue在java中的使用。比如初始化,用到的包有java.util.Queue和java.util.LinkedList。还有添加和删除操作,有add和remove,不过推荐使用offer和poll,这两个可以通过返回值来判断你的操作是否正确完成。
阅读全文
0 0
- 513. Find Bottom Left Tree Value (vector & queue)
- java Queue Leetcode 513. Find Bottom Left Tree Value
- LeetCode 513. Find Bottom Left Tree Value
- [leetcode]513. Find Bottom Left Tree Value
- 513. Find Bottom Left Tree Value
- 513. Find Bottom Left Tree Value
- [leetcode] 513. Find Bottom Left Tree Value
- 513. Find Bottom Left Tree Value
- 513. Find Bottom Left Tree Value
- 513. Find Bottom Left Tree Value
- 【LeetCode】513. Find Bottom Left Tree Value
- 513. Find Bottom Left Tree Value
- Leetcode 513. Find Bottom Left Tree Value
- LeetCode 513. Find Bottom Left Tree Value
- [DFS]513. Find Bottom Left Tree Value
- LeetCode 513. Find Bottom Left Tree Value
- 513. Find Bottom Left Tree Value
- 【leetcode】 513. Find Bottom Left Tree Value
- HashMap线程不安全原因
- 考研数学
- 阿里云服务器(centos)安装node和n
- python设计模式之策略模式
- gdb 调试
- 513. Find Bottom Left Tree Value (vector & queue)
- Java并发编程:线程池的使用
- 因子分解机FM原理及SGD训练
- 第三方MiPush框架上线:既保证推送,又无需应用挂后台
- 01hadoop简介
- 看视频习得超级内存优化和性能优化技能(runLoop)
- 02hadoop的HDFS
- Git Submodule简单操作
- 03hadoop的MapReduce