http://www.geeksforgeeks.org/check-if-a-given-binary-tree-is-sumtree/
1
#include <iostream>
2
#include <vector>
3
#include <algorithm>
4
#include <queue>
5
#include <stack>
6
#include <
string
>
7
#include <fstream>
8
using
namespace
std;
9
10
struct
node {
11
int
data;
12
struct
node *left, *
right;
13
node() : data(
0
), left(NULL), right(NULL) { }
14
node(
int
d) : data(d), left(NULL), right(NULL) { }
15
};
16
17
bool
isleaf(node *
root) {
18
return
!root->left && !root->
right;
19
}
20
21
bool
issumtree(node *
root) {
22
if
(!root || isleaf(root))
return
true
;
23
int
l =
0
;
24
int
r =
0
;
25
if
(root->left == NULL) l =
0
;
26
else
if
(isleaf(root->left)) l = root->left->
data;
27
else
l =
2
* root->left->
data;
28
if
(root->right == NULL) r =
0
;
29
else
if
(isleaf(root->right)) r = root->right->
data;
30
else
r =
2
* root->right->
data;
31
return
root->data == l + r && issumtree(root->left) && issumtree(root->
right);
32
}
33
34
int
main() {
35
node *root =
new
node(
26
);
36
root->left =
new
node(
10
);
37
root->right =
new
node(
3
);
38
root->left->left =
new
node(
4
);
39
root->left->right =
new
node(
6
);
40
root->right->right =
new
node(
3
);
41
if
(issumtree(root)) cout <<
"
yes
"
<<
endl;
42
else
cout <<
"
NO
"
<<
endl;
43
return
0
;
44
}
Data Structure Binary Tree: Check if a given Binary Tree is SumTree

