J 判断二叉树每个结点的权值是否关于根节点完全对称

如果二叉树每个结点的权值关于根节点完全对称 就输出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-08-06 17:10:43

J 判断二叉树每个结点的权值是否关于根节点完全对称的相关文章

中根递归遍历二叉树,并输出权值大于50的节点

/** * @author 黄志伟 */ public class Search{ public static void main(String[] args){ Node A = new Node(); A.setValue(51); Node B = new Node(); B.setValue(52); Node C = new Node(); C.setValue(53); Node D = new Node(); D.setValue(49); Node E = new Node();

二叉树权值最大的叶子节点到权值最小的叶子节点的距离

有一棵二叉树,树上每个点标有权值,权值各不相同,请设计一个算法算出权值最大的叶节点到权值最小的叶节点的距离.二叉树每条边的距离为1,一个节点经过多少条边到达另一个节点为这两个节点之间的距离. 给定二叉树的根节点root,请返回所求距离. 真是醉了,看漏了叶子节点. 代码: 1 import java.util.*; 2 3 /* 4 public class TreeNode { 5 int val = 0; 6 TreeNode left = null; 7 TreeNode right =

【莫队算法】【权值分块】bzoj3920 Yuuna的礼物

[算法一] 暴力. 可以通过第0.1号测试点. 预计得分:20分. [算法二] 经典问题:区间众数,数据范围也不是很大,因此我们可以: ①分块,离散化,预处理出: <1>前i块中x出现的次数(差分): <2>第i块到第j块中的众数是谁,出现了多少次. 询问的时候,对于整块的部分直接获得答案:对于零散的部分,暴力统计每个数出现 的次数,加上差分的结果,尝试更新ans. 时间复杂度O(m*sqrt(n)), 空间复杂度O(n*sqrt(n)). ②考虑离线,莫队算法,转移的时候使用数据

(树)判断二叉树是否为BST

题目:判断一颗二叉树是否为BST. 思路:其实这个问题可以有多个解决方法. 方法一:递归解决.根据BST的特性.左边的小于根节点的值,右边的大于根节点的值.并且对于每一棵子树都是如此.所以我们可以直接递归的对左右子树的值与根节点的值进行比较.左子树的值小于当前根节点的值,将当前根节点的值作为最大值传入左子树,左子树的值都小于他,递归处理:右子树的值都大于根节点的值,将根节点的值作为最小值传入右子树,右子树的值都大于他. 代码: /** * Definition for binary tree *

【NOIP之旅】NOIP2014 day1 T2 联合权值

2.联合权值 (link.cpp/c/pas) [问题描述] 无向连通图G有n个点,n-1条边.点从1到n依次编号,编号为i的点的权值为Wi  ,每条边的长度均为1.图上两点(u, v)的距离定义为u点到v点的最短距离.对于图G上的点对(u, v),若它们的距离为2,则它们之间会产生Wu×Wv的联合权值. 请问图G上所有可产生联合权值的有序点对中,联合权值最大的是多少?所有联合权值之和是多少? [输入] 输入文件名为link.in. 第一行包含1个整数n. 接下来n-1行,每行包含2个用空格隔开

剑指Offer面试题25(Java版):二叉树中和为某一值的路径

题目:输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.从树的根节点开始往下一直到叶结点所经过的所有的结点形成一条路径. 如下图,输入二叉树和整数22,则打印出两条路径,第一条路径包含结点10,12,第二条路径包含的结点为10,5,7. 一般的数据结构和算法的教材都没有介绍树的路径,因此对大多数应聘者而言,这是一个新概念,也就很难一下子想出完整的解题思路.这个时候我们可以试着从一两个具体的例子入手,找到规律. 以图中的二叉树为例分析,由于路径是从根节点出发到叶结点,也就是说

【树状数组套权值线段树】bzoj1901 Zju2112 Dynamic Rankings

谁再管这玩意叫树状数组套主席树我跟谁急 明明就是树状数组的每个结点维护一棵动态开结点的权值线段树而已 好吧,其实只有一个指针,指向该结点的权值线段树的当前结点 每次查询之前,要让指针指向根结点 不同结点的权值线段树之间毫无关联 可以看这个:http://blog.csdn.net/popoqqq/article/details/40108669?utm_source=tuicool #include<cstdio> #include<algorithm> using namespa

给定一个整数N,找出一个比N大且最接近N,但二进制权值与该整数相同 的数

1,问题描述 给定一个整数N,该整数的二进制权值定义如下:将该整数N转化成二进制表示法,其中 1 的个数即为它的二进制权值. 比如:十进制数1717 的二进制表示为:0000 0110 1011 0101 故它的二进制权值为7(二进制表示中有7个1) 现在要求一个比N大,且最靠近N的数,且这个数的二进制权值与N相同.(这里不考虑Integer.MAX_VALUE 和负数情形.) 对于有符号的32位整数而言:它们的补码如下: Integer.MAX_VALUE= 0111 1111 1111 11

HDU 1533 KM算法(权值最小的最佳匹配)

Going Home Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 3299    Accepted Submission(s): 1674 Problem Description On a grid map there are n little men and n houses. In each unit time, every l