【LeetCode】受限条件下可到达节点的数目 Java 题解
题目描述
现有一棵由 n 个节点组成的无向树,节点编号从 0 到 n - 1 ,共有 n - 1 条边。
给你一个二维整数数组 edges ,长度为 n - 1 ,其中 edges[i] = [ai, bi] 表示树中节点 ai 和 bi 之间存在一条边。另给你一个整数数组 restricted 表示 受限 节点。
在不访问受限节点的前提下,返回你可以从节点 0 到达的 最多 节点数目。
注意,节点 0 不 会标记为受限节点。
复制代码
思路分析
今天的算法题目是图处理题目。图题目的一般解法是 DFS。 DFS 全称是 Depth First Search,中文名是深度优先搜索,是一种用于遍历或搜索树或图的算法。所谓深度优先,就是说每次都尝试向更深的节点走。
分析题目,题目给出的是无向树,我们在创建树的时候,edges 是双向的,使用 edges 来构建树。
构建完成基本关系之后,需要处理受限节点。在代码实践中,我们可以直接将 restricted 的位置标记为访问过的节点,方便计算。
题目中明确指出了在不访问受限节点的前提下,返回你可以从节点 0 到达的 最多 节点数目。因此我们可以 DFS 直接从 0 开始访问。具体代码实现如下,供参考。
通过代码
复制代码
总结
上述算法的时间复杂度是 O(n), 空间复杂度是 O(n)
坚持算法每日一题,加油!
版权声明: 本文为 InfoQ 作者【Albert】的原创文章。
原文链接:【http://xie.infoq.cn/article/9901b423467d62b4a39858087】。文章转载请联系作者。
评论