๐
ํ์ด์ฌ ์๊ณ ๋ฆฌ์ฆ ์ธํฐ๋ทฐ
์ฑ ์ ์ฐธ๊ณ ํ์ต๋๋ค.
์ด์ง ํธ๋ฆฌ์ ๋ฃจํธ๊ฐ ์ฃผ์ด์ง๋ฉด ๊ฒฝ๋ก์ ๊ฐ ๋ ธ๋๊ฐ ๋์ผํ ๊ฐ์ ๊ฐ๋ ๊ฐ์ฅ ๊ธด ๊ฒฝ๋ก์ ๊ธธ์ด๋ฅผ ๋ฐํํฉ๋๋ค. ์ด ๊ฒฝ๋ก๋ ๋ฃจํธ๋ฅผ ํต๊ณผํ๊ฑฐ๋ ํต๊ณผํ์ง ์์ ์ ์์ต๋๋ค. ๋ ๋ ธ๋ ์ฌ์ด์ ๊ฒฝ๋ก ๊ธธ์ด๋ ๋ ธ๋ ์ฌ์ด์ ๊ฐ์ฅ์๋ฆฌ ์๋ก ํ์๋ฉ๋๋ค.
๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ ํ์ฌ๋ ธ๋์์ ์์๋ ธ๋์ ๊ฐ๊ณผ ์์์์ ๊ฐ์ ๊ฐ์ด ์ต๋ ์ฐ์ ๋ช๊ฐ ์๋์ง์ ๋ํด ์์์ผ ํ๋ค.
๋ฐ๋ผ์,
์ฒซ๋ฒ์งธ๋ก ์์์์ ๊ฐ์ ๊ฐ์ด ์ต๋ ์ฐ์ ๋ช๊ฐ ์๋์ง ๋ฐํ๊ฐ์ผ๋ก ๋ฐ์์จ๋ค.
๋๋ฒ์งธ๋ก๋ ์์๋
ธ์ ๊ฐ์ root.next.val์ ํตํด์ ์ป์ด์จ๋ค. (๋จ, root.next๊ฐ none์ด ์๋ ๋)
class Solution:
result = 0
def longestUnivaluePath(self, root: TreeNode) -> int:
def dfs(root):
if not root:
return None
left = dfs(root.left)
right = dfs(root.right)
if root.left and root.val == root.left.val:
left += 1
else:
left = 0
if root.right and root.val == root.right.val:
right += 1
else:
right = 0
self.result = max(self.result, left + right)
return max(left, right)
dfs(root)
return self.result
ํด๋์ค ๋ณ์ result๋ฅผ ์ฌ์ฉํด ๊ฐ์ด ์ฌํ ๋น ๋์ง ์๋๋ก ํ๋ค.
result ๋ณ์์ ๊ณ์ํด์ ์ต๋๊ฐ์ ๊ฐฑ์ ํ๋๋ก ํ๋ค.