Data Structure Binary Tree: Check if a given Binary Tree is SumTree

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 }

 

你可能感兴趣的:(binary)