λ¬Έμ
μ½λ
#include <iostream>
#include <vector>
using namespace std;
vector<int> graph[100001];
bool visited[1000001];
int end_node;
int ans = 0;
bool flag = true;
void go(int node){
int left_node = graph[node][0]; // λ
ΈλμΈ μ’μΈ‘ μμ
int right_node = graph[node][1]; // λ
Έλμ μ°μΈ‘ μμ
if(left_node != -1){
ans+=1;
go(left_node);
if(flag) ans+=1;
}
if(right_node != -1){
ans+=1;
go(right_node);
if(flag) ans+=1;
}
if(node == end_node){
flag = false;
return;
}
}
void inorder(int node){
int left_node = graph[node][0];
int right_node = graph[node][1];
if(left_node != -1){
inorder(left_node);
}
end_node = node;
if(right_node != -1){
inorder(right_node);
}
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
int N; cin>>N;
for(int i=0; i<N; i++){
int a, b, c; cin>>a>>b>>c;
graph[a].push_back(b);
graph[a].push_back(c);
}
inorder(1); // μ€μμνμ λ λ
Έλλ₯Ό μ°Ύμ.
go(1); // μ μ¬ μ€μμν νμ
cout<<ans;
}
νμ΄
λ¬Έμ μμ νΈλ¦¬μ λλ€. νΈλ¦¬μ μ€μ μν μμλ Left -> Root -> Right μ λλ€. νΈλ¦¬μ μν μμλ₯Ό μ 리ν κΈμ μλμ μμ΅λλ€.
μ νΈλ¦¬λ₯Ό μ€μ μννκ² λλ©΄ 4 -> 2 -> 5 -> 1 -> 6 -> 3 -> 7μ λλ€. μ΄λ μ€μ μνμ λμ 7μ΄λ©°, λ¬Έμ μ μ μ¬ μ€μ μνμ λμ μ€μ μνμ λ λ ΈλμΈ 7μ΄ λμ΄μΌ ν©λλ€.
μ μ΄λ―Έμ§λ λ¬Έμ μμ μꡬνλ μ μ¬ μ€μμνμ νμ μμμ λλ€.
루νΈμΈ λ Έλ 1μμ μμν΄μ μ€μμνμ λ λ ΈλμΈ 7μμ λλλ©° 1 -> 2 -> 4 -> 5 -> 2 -> 1 -> 3 -> 6 -> 3 -> 7κ³Ό κ°μ μμλ‘ μνλ₯Ό ν©λλ€.
λ°λΌμ λ¬Έμ νμ΄ μμ΄λμ΄λ λ€μκ³Ό κ°μ΅λλ€.
- μ€μ μνλ₯Ό νμ¬ μ€μ μνμ λ λ Έλλ₯Ό μ°Ύλλ€.
- μ€μ μνλ₯Ό μμνμ¬ κ° λ Έλλ₯Ό νμν λλ§λ€ λ°©λ¬Έ νμλ₯Ό + 1 μΆκ°νκ³ , μ볡μ΄κΈ° λλ¬Έμ νμνκ³ λμμ λλ λ°©λ¬Έ νμλ₯Ό +1 ν΄μ€λ€.
- λ§μ½ λ°©λ¬Έ λ Έλκ° μ€μμνμ λ λ ΈλλΌλ©΄, μ볡κΉμ§ νμ§ μκ³ ν΄λΉ λ Έλμμ λλκΈ° λλ¬Έμ bool λ³μλ₯Ό λ°λ‘ 체ν¬νμ¬ λ°©λ¬Έ νμλ₯Ό ν λ²λ§ νκ³ μ’ λ£νλλ‘ νλ€.
'Algorithm π§π»βπ» > λ°±μ€(BOJ)' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λ°±μ€,c++] 15661λ² - λ§ν¬μ μ€ννΈ (0) | 2022.09.18 |
---|---|
[λ°±μ€,c++] 6987λ² - μλμ»΅ (0) | 2022.09.18 |
[λ°±μ€,c++] 21608λ² - μμ΄ μ΄λ±νκ΅ (0) | 2022.09.18 |
[λ°±μ€,c++] 16719λ² - ZOAC (0) | 2022.09.16 |
[λ°±μ€,c++] 17276λ² - λ°°μ΄ λ리기 (0) | 2022.09.15 |
[λ°±μ€,c++] 20436λ² - ZOAC 3 (0) | 2022.09.15 |
λκΈ