博客
关于我
【Lintcode】650. Find Leaves of Binary Tree
阅读量:182 次
发布时间:2019-02-28

本文共 1448 字,大约阅读时间需要 4 分钟。

题目地址:

给定一个二叉树,要求返回其叶子节点,然后将叶子节点删去,继续返回叶子节点,继续删去叶子,直到树空。返回每次得到的叶子节点。

更快的 O ( n ) O(n) O(n)的方法参考。下面介绍一个逐次删掉叶子的方法:

思路是DFS,开一个函数对二叉树做DFS,每次DFS的时候,将叶子收集在一个列表里,同时删除掉叶子节点;删除的方式是,将这个函数的返回值设为删掉所有叶子后的二叉树的树根,这样就可以在到达叶子的时候返回null回去连到上一层的树根上,就达到了删掉叶子的效果。代码如下:

import java.util.ArrayList;import java.util.List;public class Solution {       /*     * @param root: the root of binary tree     * @return: collect and remove all leaves     */    public List
> findLeaves(TreeNode root) { // write your code here List
> res = new ArrayList<>(); while (root != null) { List
cur = new ArrayList<>(); root = dfs(root, cur); res.add(cur); } return res; } private TreeNode dfs(TreeNode root, List
cur) { if (root == null) { return null; } else if (root.left == null && root.right == null) { cur.add(root.val); return null; } else { root.left = dfs(root.left, cur); root.right = dfs(root.right, cur); return root; } }}class TreeNode { int val; TreeNode left, right; TreeNode(int x) { val = x; }}

时间复杂度 O ( n 2 ) O(n^2) O(n2)(最差情况是每次删除的叶子节点个数是 1 1 1,比如整个二叉树是个链表,那么此时时间复杂度最高。可以考虑 T ( n ) = ∑ i = 1 h O ( n − l i ) T(n)=\sum_{i=1}^{h}O(n-l_i) T(n)=i=1hO(nli),其中 l i l_i li是每次删除的叶子, h h h是树的高度,容易知道最差情况是二叉树是链表的时候。而若二叉树较为平衡时,时间复杂度可以降到 O ( n log ⁡ n ) O(n\log n) O(nlogn)),空间 O ( h ) O(h) O(h)(除去最后返回的列表的空间)。

转载地址:http://idds.baihongyu.com/

你可能感兴趣的文章
Mysql学习总结(71)——MySQL 重复记录查询与删除总结
查看>>
Mysql学习总结(71)——数据库介绍(MySQL安装 体系结构、基本管理)再回顾
查看>>
Mysql学习总结(73)——MySQL 查询A表存在B表不存在的数据SQL总结
查看>>
Mysql学习总结(76)——MySQL执行计划(explain)结果含义总结
查看>>
Mysql学习总结(77)——温故Mysql数据库开发核心原则与规范
查看>>
Mysql学习总结(78)——MySQL各版本差异整理
查看>>
Mysql学习总结(79)——MySQL常用函数总结
查看>>
Mysql学习总结(7)——MySql索引原理与使用大全
查看>>
Mysql学习总结(80)——统计数据库的总记录数和库中各个表的数据量
查看>>
Mysql学习总结(81)——为什么MySQL不推荐使用uuid或者雪花id作为主键?
查看>>
Mysql学习总结(82)——MySQL逻辑删除与数据库唯一性约束如何解决?
查看>>
Mysql学习总结(83)——常用的几种分布式锁:ZK分布式锁、Redis分布式锁、数据库分布式锁、基于JDK的分布式锁方案对比总结
查看>>
Mysql学习总结(84)—— Mysql的主从复制延迟问题总结
查看>>
Mysql学习总结(85)——开发人员最应该明白的数据库设计原则
查看>>
Mysql学习总结(8)——MySql基本查询、连接查询、子查询、正则表达查询讲解
查看>>
Mysql学习总结(9)——MySql视图原理讲解与使用大全
查看>>
MySQL学习笔记十七:复制特性
查看>>
Mysql学习第一课-mysql的定义及sql语句
查看>>
mysql安全模式: sql_safe_updates
查看>>
mysql安装,卸载,连接
查看>>