# 13452 - Walk on the tree
>author: Utin
###### tags: `binary tree`
---
## Brief
See the code below
## Solution 0
```c=
#include <stdio.h>
#include <stdlib.h>
typedef struct _node {
int value;
int left;
int right;
int parent;
} Node;
int N, Q, A, B;
Node arr[3001];
int run(int idx, int pre);
int main() {
scanf("%d", &N);
for (int i = 1; i <= N; i++) {
arr[i].value = i;
arr[i].parent = 0;
}
for (int i = 1; i <= N; i++) {
scanf("%d %d", &arr[i].left, &arr[i].right);
arr[arr[i].left].parent = arr[i].value;
arr[arr[i].right].parent = arr[i].value;
}
scanf("%d", &Q);
for (int i = 0; i < Q; i++) {
scanf("%d %d", &A, &B);
run(B, 0); // 倒過來跑
printf("\n");
}
}
int run(int idx, int pre) {
// 到得了A
if (idx == A) return 1;
// 到不了A
if (!idx) return 0;
// 三個方向都試一下
if (arr[idx].left != pre && run(arr[idx].left, idx)) {
printf("P");
return 1;
}
if (arr[idx].right != pre && run(arr[idx].right, idx)) {
printf("P");
return 1;
}
if (arr[idx].parent != pre && run(arr[idx].parent, idx)) {
if (arr[arr[idx].parent].left == arr[idx].value) printf("L");
else printf("R");
return 1;
}
// 沒料
return 0;
}
// By Utin
```
## Reference