您的位置:首页 > 其它

257-e-Binary Tree Paths

2016-03-29 16:38 375 查看
本题逻辑不难,就一个深搜把经过的节点依次记录就行。但是因为用C,所以返回的char** 老要realloc,内存不好管理,写完后自己的Xcode过了但是oj老是runtime error应该就是内存处理不好,把自己代码贴上来做个记录,以后可能会重看内存是否有误:

//void pathOfBTree(struct TreeNode *node, int level, int *returnSize, char ***result) {
// int length = level - 1;
//
// (*result)[*returnSize][length] = node->val ;
//
// char *t = (char *)realloc((*result)[*returnSize], sizeof(char) * (length + 2));
// if (t == (*result)[*returnSize])
// (*result)[*returnSize] = t;
// else {
// strcpy(t, (*result)[*returnSize]);
// (*result)[*returnSize] = t;
// };
//
// if (node->left == NULL && node->right == NULL) {
// (*result)[*returnSize][level] = '\0';
//
// *returnSize += 1;
// //特别注意这里双重指针的realloc,因为有可能返回的指针是新分配的属于栈内存,所以此时要用三重指针来持有,否则递归回退后函数释放则新指针丢失
// char **t = (char **)realloc(*result, sizeof(char *) * (*returnSize + 1));
// if (t == *result)
// *result = t;
// else {
// for (int i = 0; i < *returnSize; i++) {
// strcpy(t[i], (*result)[i]);
// }
// *result = t;
// }
//
// (*result)[*returnSize] = (char *)calloc(level + 1, sizeof(char));
// strcpy((*result)[*returnSize], (*result)[*returnSize - 1]);
//
// return;
// }
//
// pathOfBTree(node->left, level + 1, returnSize, result);
//
// if (node->right != NULL) {
// pathOfBTree(node->right, level + 1, returnSize, result);
// }
//}
//char** binaryTreePaths(struct TreeNode* root, int* returnSize) {
// if (root == NULL)
// return NULL;
//
// char **result = (char **)calloc(1, sizeof(char *));
// *result = (char *)calloc(1, sizeof(char));
// *returnSize = 0;
//
// int level = 1;
//
// pathOfBTree(root, level, returnSize, &result);
//
// return result;
//}

用c++的vector就比较简单了,网上摘了一个c++的,ac如下:
//class Solution_BTP {
//public:
// vector<string> binaryTreePaths(TreeNode* root)
// {
// vector<string> results;
// visitTreeNode(root, "", results);
// return results;
// }
//private:
// void visitTreeNode(TreeNode* node, string path, vector<string>& result)
// {
// if(node == NULL) return;
// if (!path.empty())
// {
// path += "->";
// }
//
// path += int2Str(node->val);
//// path += node->val;
//
// if (node->left == NULL && node->right == NULL)
// {
// result.push_back(path);
// }
// else
// {
// if (node->left != NULL)
// {
// visitTreeNode(node->left, path, result);
// }
// if (node->right != NULL)
// {
// visitTreeNode(node->right, path, result);
// }
// }
// }
// std::string int2Str(int nValue)
// {
// ostringstream os;
// os << nValue;
// return os.str();
// }
//};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode