1+ // Definition for a binary tree node.
2+ public class TreeNode {
3+ public var val : Int
4+ public var left : TreeNode ?
5+ public var right : TreeNode ?
6+ public init ( ) { self . val = 0 ; self . left = nil ; self . right = nil ; }
7+ public init ( _ val: Int ) { self . val = val; self . left = nil ; self . right = nil ; }
8+ public init ( _ val: Int , _ left: TreeNode ? , _ right: TreeNode ? ) {
9+ self . val = val
10+ self . left = left
11+ self . right = right
12+ }
13+ }
14+
15+ class Solution {
16+ func isSubtree( _ root: TreeNode ? , _ subRoot: TreeNode ? ) -> Bool {
17+ // ์์๊ฐ 0๊ฐ์ธ ํธ๋ฆฌ๋ ๋ชจ๋ ํธ๋ฆฌ์ ์๋ธํธ๋ฆฌ๋ก ๊ฐ์ฃผ - ๋ฌธ์ ๋ด์์๋ ๋ถ๊ฐ๋ฅํ ์กฐ๊ฑด
18+ if subRoot == nil { return true }
19+
20+ // ์ด์ธ์ ๊ฒฝ์ฐ root๊ฐ ๋ฐ๋์ ์กด์ฌํด์ผ ํจ
21+ guard let root else { return false }
22+
23+ // ๋ ํธ๋ฆฌ๊ฐ ๊ฐ์ ๊ฒฝ์ฐ true ๋ฐํ - ์๊ธฐ ์์ ์ ์์ ์ ์๋ธํธ๋ฆฌ
24+ if root == subRoot { return true }
25+
26+ // ์ด์ธ์ ๊ฒฝ์ฐ ์ผ์ชฝ ์์, ์ค๋ฅธ์ชฝ ์์์ ๋ํด ์๋ธํธ๋ฆฌ ๊ฒ์ฌ ์ํ
27+ return isSubtree ( root. left, subRoot) || isSubtree ( root. right, subRoot)
28+ }
29+ }
30+
31+ // Equatable ํ๋กํ ์ฝ์ ์ค์ํ๋๋ก ์ ์ํจ์ผ๋ก์จ, == ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ๋ณ๊ฒฝ
32+ extension TreeNode : Equatable {
33+ public static func == ( lhs: TreeNode , rhs: TreeNode ) -> Bool {
34+ // Swift ์ปดํ์ผ๋ฌ ํน์ฑ์, ๋์ผํ ์ธ์คํด์ค๋ฅผ ๋น๊ตํ ๋ === ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ฉด O(1) ์๊ฐ ๋ด์ ํ์ ๊ฐ๋ฅ
35+ // ๋ฌผ๋ก ์ฐธ์กฐ ํ์
์์๋ง ์ฌ์ฉ ๊ฐ๋ฅํ๋ฉฐ, TreeNode๋ class์ฌ์ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค
36+ if lhs === rhs { return true }
37+
38+ // ๋์ผํ ๋
ธ๋์ ์กฐ๊ฑด์, ๊ฐ์ด ๊ฐ๊ณ ์ผ์ชฝ ์์์ด ๊ฐ์ผ๋ฉฐ ์ค๋ฅธ์ชฝ ์์์ด ๊ฐ์ ๊ฒ
39+ return lhs. val == rhs. val && lhs. left == rhs. left && lhs. right == rhs. right
40+ }
41+ }
0 commit comments