Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
libterty committed Mar 5, 2021
1 parent 3a2b09d commit 86fb677
Show file tree
Hide file tree
Showing 3 changed files with 86 additions and 0 deletions.
34 changes: 34 additions & 0 deletions Average-Levels-BST/bst.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
#include <iostream>

using namespace std;

struct TreeNode {
int val;
TreeNode *left, *right;
};

TreeNode *newNode(int val) {
TreeNode *node = (TreeNode*)malloc(sizeof(TreeNode));
node -> val = val;
node -> left = node -> right = NULL;
return node;
}

TreeNode *insertLevelOrder(int arr[], TreeNode *root, int i, int n) {
if (i < n) {
TreeNode *temp = newNode(arr[i]);
root = temp;

root -> left = insertLevelOrder(arr, root -> left, i * 2 + 1, n);
root -> right = insertLevelOrder(arr, root -> right, 2 * i + 2, n);
}
return root;
}

void inOrder(TreeNode *root) {
if (root != NULL) {
inOrder(root -> left);
cout << root -> val << " ";
inOrder(root -> right);
}
}
Binary file added Average-Levels-BST/main
Binary file not shown.
52 changes: 52 additions & 0 deletions Average-Levels-BST/main.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
#include <iostream>
#include <vector>
#include <queue>
#include <math.h>
#include "bst.cpp"

using namespace std;

/**
* @see https://leetcode.com/explore/challenge/card/march-leetcoding-challenge-2021/588/week-1-march-1st-march-7th/3661/
*/
class Solution {
public:
vector<double> averageOfLevels(TreeNode* root) {
vector<double> ans;
if (!root) return ans;
queue<TreeNode*> q;
q.push(root);
while(!q.empty()) {
double sum = 0, count = 0;
queue<TreeNode*> temp;
while (!q.empty()) {
TreeNode *n = q.front();
q.pop();
sum += n->val;
count++;
if (n->left != NULL)
temp.push(n->left);
if (n->right != NULL)
temp.push(n->right);
}
q = temp;
if (!isnan(sum/count)) ans.push_back(sum/count);
}
return ans;
}
};

int main() {
int arr[] = {3,9,20,15,7};
int n = sizeof(arr)/sizeof(arr[0]);
TreeNode *root = insertLevelOrder(arr, root, 0, n);

Solution s;
vector<double> r = s.averageOfLevels(root);

for (size_t i = 0; i < r.size(); i++) {
cout << r[i] << " ";
}
cout << endl;
return 0;
}

0 comments on commit 86fb677

Please sign in to comment.