如果二叉树每个结点的权值关于根节点完全对称 就输出Yes
Sample Input
2
7 //结点
1 2 3 //结点1的左孩子是结点2 右孩子是结点3
2 4 5
3 6 7
4 0 0
5 0 0
6 0 0
7 0 0
1 2 2 3 4 4 3 //权值
5
1 2 3
2 0 4
3 0 5
4 0 0
5 0 0
1 2 2 3 3
Sample Output
Yes
No
1 # include <cstdio> 2 # include <cstring> 3 # define LL long long 4 using namespace std ; 5 6 bool flag ; 7 8 struct tree 9 { 10 int lson ; 11 int rson ; 12 int num ; 13 int id ; 14 }t[120]; 15 16 void dfs(int r1 , int r2) 17 { 18 if (r1 == 0 && r2 == 0) 19 return ; 20 if (r1 == 0 && r2 != 0 || r1 != 0 && r2 == 0 || t[r1].num != t[r2].num) 21 { 22 flag = 0 ; 23 return ; 24 } 25 if (!flag) 26 return ; 27 dfs(t[r1].lson , t[r2].rson) ; 28 dfs(t[r1].rson , t[r2].lson) ; 29 } 30 31 int main () 32 { 33 // freopen("in.txt","r",stdin) ; 34 int T ; 35 scanf("%d" , &T) ; 36 while (T--) 37 { 38 int n ; 39 scanf("%d" , &n) ; 40 int i ; 41 int a ,b ,c ; 42 for (i = 1 ; i <= n ;i++) 43 { 44 scanf("%d %d %d" , &a , &b , &c) ; 45 t[a].lson = b ; 46 t[a].rson = c ; 47 } 48 for (i = 1 ; i <= n ;i++) 49 scanf("%d" , &t[i].num) ; 50 flag = 1 ; 51 52 dfs(t[1].lson , t[1].rson) ; 53 if (flag) 54 printf("Yes\n") ; 55 else 56 printf("No\n") ; 57 } 58 59 return 0 ; 60 }
时间: 2024-10-11 11:03:21