소스 검색

Adding solution for 637

Vinicius Teshima 2 주 전
부모
커밋
6098c8c327
2개의 변경된 파일115개의 추가작업 그리고 0개의 파일을 삭제
  1. 74 0
      C++/637.cpp
  2. 41 0
      C++/utils.hpp

+ 74 - 0
C++/637.cpp

@@ -0,0 +1,74 @@
+#include <iostream>
+#include <cstdint>
+#include <vector>
+
+#include "./utils.hpp"
+
+using std::vector;
+using std::string;
+
+/**
+ * Definition for a binary tree node.
+ * struct TreeNode {
+ *     int val;
+ *     TreeNode *left;
+ *     TreeNode *right;
+ *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
+ *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
+ *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
+ * };
+ */
+class Solution {
+public:
+    vector<double>
+    averageOfLevels(TreeNode *root)
+    {
+        vector<double> vec;
+        vector<int> amount;
+        _go(0, root, vec, amount);
+        for ( unsigned int i = 0; i < vec.size(); ++i ) {
+            vec[i] /= amount[i];
+        }
+        return vec;
+    }
+
+    void
+    _go(unsigned long level, TreeNode *root, vector<double> &vec, vector<int> &amount)
+    {
+        if ( root == NULL ) { return; }
+        if ( level >= vec.size() ) {
+            vec.push_back(0);
+            amount.push_back(0);
+        }
+        vec[level] += root->val;
+        ++amount[level];
+        ++level;
+        _go(level, root->left, vec, amount);
+        _go(level, root->right, vec, amount);
+    }
+};
+
+
+void r(TreeNode *root, vector<double> exp) {
+    std::cout << "Solution().averageOfLevels(" << treenode_to_str(root) << ") = ";
+    std::cout << vector_to_str(Solution().averageOfLevels(root));
+    std::cout << " | exp: " << vector_to_str(exp) << "\n";
+};
+
+int main(void) {
+    TreeNode root1l = TreeNode(9);
+    TreeNode root1rl = TreeNode(15);
+    TreeNode root1rr = TreeNode(7);
+    TreeNode root1r = TreeNode(20, &root1rl, &root1rr);
+    TreeNode root1 = TreeNode(3, &root1l, &root1r);
+    r(&root1, {3.00000,14.50000,11.00000});
+
+    TreeNode root2ll = TreeNode(15);
+    TreeNode root2lr = TreeNode(7);
+    TreeNode root2l = TreeNode(9, &root2ll, &root2lr);
+    TreeNode root2r = TreeNode(20);
+    TreeNode root2 = TreeNode(3, &root2l, &root2r);
+    r(&root2, {3.00000,14.50000,11.00000});
+
+    return 0;
+}

+ 41 - 0
C++/utils.hpp

@@ -0,0 +1,41 @@
+
+#include <string>
+#include <vector>
+
+struct TreeNode {
+    int val;
+    TreeNode *left;
+    TreeNode *right;
+    TreeNode() : val(0), left(nullptr), right(nullptr) {}
+    TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
+    TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
+};
+
+std::string
+treenode_to_str(TreeNode *root)
+{
+    if ( root == NULL ) { return "nil"; }
+    std::string ret;
+    ret += "TreeNode(";
+    ret += std::to_string(root->val);
+    ret += ", ";
+    ret += treenode_to_str(root->left);
+    ret += ", ";
+    ret += treenode_to_str(root->right);
+    ret += ")";
+    return ret;
+}
+
+template<typename T>
+std::string
+vector_to_str(std::vector<T> vec)
+{
+    std::string ret = "[";
+    for ( unsigned long i = 0; i < vec.size(); ++i ) {
+        if ( i == 0 ) { ret += "\""; ret += std::to_string(vec[i]); ret += "\""; continue; }
+        ret += ", \""; ret += std::to_string(vec[i]); ret += "\"";
+    }
+    ret += "]";
+    return ret;
+}
+