LeetCode 834 樹中距離之和
給定一個無向、連通的樹。樹中有 N 個標記為 0...N-1 的節點以及 N-1 條邊 。
第 i 條邊連線節點 edges[i][0] 和 edges[i][1] 。
返回一個表示節點 i 與其他所有節點距離之和的列表 ans。
參考標準解析:連結寫的答案。
from typing import *
class Solution:
def __init__(self):
self.ans = None
self.num_nodes = None
self.dp = None
self.graph = None
self.visited = None
def sumOfDistancesInTree(self, N: int, edges: List[List[int]]) -> List[int]:
self.ans = [0] * N
self.num_nodes = [0] * N
self.dp = [0] * N
self.visited = [False] * N
self.graph = [[] for _ in range(N)]
for edge in edges:
self.graph[edge[0]].append(edge[1])
self.graph[edge[1]].append(edge[0])
self.dfs1(0)
self.visited = [False] * N
self.dfs2(0)
return self.ans
def dfs1(self, i):
self.visited[i] = True
self.num_nodes[i] = 1
for j in self.graph[i]:
if not self.visited[j]:
self.dfs1(j)
self.dp[i] += (self.dp[j] + self.num_nodes[j])
self.num_nodes[i] += self.num_nodes[j]
def dfs2(self, i):
self.ans[i] = self.dp[i]
self.visited[i] = True
for j in self.graph[i]:
if not self.visited[j]:
self.dp[i] -= (self.dp[j] + self.num_nodes[j])
self.num_nodes[i] -= self.num_nodes[j]
self.dp[j] += (self.dp[i] + self.num_nodes[i])
self.num_nodes[j] += self.num_nodes[i]
self.dfs2(j)
self.num_nodes[j] -= self.num_nodes[i]
self.dp[j] -= (self.dp[i] + self.num_nodes[i])
self.num_nodes[i] += self.num_nodes[j]
self.dp[i] += (self.dp[j] + self.num_nodes[j])
相關文章
- leetcode-834. 樹中距離之和LeetCode
- 834. 樹中距離之和-困難-樹、圖、動態規劃、深度優先搜尋動態規劃
- LeetCode 461. 漢明距離LeetCode
- LeetCode72編輯距離LeetCode
- leetcode-624.陣列列表中的最大距離LeetCode陣列
- 45.LeetCode461. 漢明距離LeetCode
- Java LeetCode 72. 編輯距離JavaLeetCode
- leetcode演算法熱題--兩樹之和LeetCode演算法
- Leetcode 編輯距離(動態規劃)LeetCode動態規劃
- 二叉樹:距離最近的共同祖先二叉樹
- 【leetcode】72. Edit Distance 編輯距離計算LeetCode
- 馬氏距離與歐氏距離
- 二叉樹任意兩個節點間的最大距離(Java,LeetCode 543二叉樹的直徑 遞迴)二叉樹JavaLeetCode遞迴
- 【Python】距離Python
- 【Leetcode 每日一題】1030. 距離順序排列矩陣單元格(水題,曼哈頓距離排序)LeetCode每日一題矩陣排序
- JavaScript 元素距離視窗頂部的距離JavaScript
- LeetCode - 兩數之和LeetCode
- LeetCode:兩數之和LeetCode
- 783. 二叉搜尋樹節點最小距離
- 編輯距離及編輯距離演算法演算法
- 曼哈頓距離與切比雪夫距離
- JavaScript獲取元素距離文件頂部的距離JavaScript
- 最小距離分類器,互動式選取影像樣本分類資料,進行最小距離分類(實現歐式距離,馬氏距離,計程距離)
- Laravel 距離排序Laravel排序
- unit原子距離
- 餘弦距離
- 馬氏距離
- leetcode #1 兩數之和LeetCode
- LeetCode 1 兩數之和LeetCode
- LeetCode之兩數之和LeetCode
- LeetCode-兩數之和LeetCode
- ggplot2中繪圖設定x軸、y軸名稱距離框線的距離繪圖
- 【DP】編輯距離
- 距離度量學習
- 曼哈頓距離與切比雪夫距離的互化
- LeetCode: Two sum(兩數之和)LeetCode
- LeetCode-1. 兩數之和LeetCode
- LeetCode 15.三數之和LeetCode