最小高度树

本文介绍了LeetCode第310题——最小高度树的解决方案,重点讲解了如何利用拓扑排序法进行求解,同时提到了算法的时间复杂度为O(n),空间复杂度也为O(n)。
摘要由CSDN通过智能技术生成

leetcode 310 题 [medium]
中: 最小高度树
英: Minimum Height Trees
在这里插入图片描述在这里插入图片描述

题解

核心:拓扑排序法
时间复杂度:O(n)
空间复杂度:O(n)

/**
 * @param {number} n
 * @param {number[][]} edges
 * @return {number[]}
 */
var findMinHeightTrees = function(n, edges) {
   
    /**
     * 拓扑排序法
     * 步骤:每次删除所有当前入度为1的结点,直到最后剩下的结点数 <= 2
     * 原理:
     * 1. 删除入度为1的结点:相当于剪去所有当前的叶节点,最小高度树的层数必然(仅)下降1层
     * (1) 所以最小高度树的高度等于(删除次数 + 剩下结点数)(假设只有一个结点时高度为1)
     * 2. 最后结点 <= 2
     * (1) 最后剩下1个结点:那么该结点为唯一解
     * (2) 最后剩下2个结点:以这两个结点为根的树都是最小高度树
     * (3) 最后剩下3个结点:那么必然有两个入度为1的结点和一个入度大于1的结点,可再次通过删除所有当前入度为1的结点进而使得树的高度(仅)下降1层
     * (4) 最后剩下结点>3,与(3)同理,可以通过剪枝使树高度下降
     * 
     * 时间复杂度:O(n):O(n)(构建入度数组(邻接列表))+ O(n)(循环删除入度为1的结点) => O(2n) => O(n)
     * 空间复杂度:O(n):O(2*(n-1))(邻接列表大小,其实就等于edges中的结点个数) => O(n)
     */
    // 初始化入度数组(其
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值