力扣606——根据二叉树创建字符串
根据这两个示例的输出结果我们可以非常明显的看到显示输出根的结果也就是提示我们这道题用的思想是前序遍历。void Preorder(BTNode* root) { //递归实现有一个重要的就是需要有停止条件 if (root NULL) { return; } //前序遍历根左子树右子树 printf(%d, root-data); Preorder(root-left); Preorder(root-right); }前序遍历的基础代码非常简单但是这道题里面他是变成字符串再放到新的里面去输出。现在我们来总结一下现在想的想法首先总体使用前序遍历在遍历时判断左右子树是否为空树如果左子树为空右子树不为空的情况是需要添加“”但如果是右子树为空左子树不为空时无需添加的因为这时候是不会有争议的。好了这是上面我们想好的部分代码思路现在让我们实现代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */ void _tree2str(struct TreeNode* root,char* str,int* pi) { //copy之后主要进行的就是在str这个数组上进行连续操作 if(rootNULL) { //这个是判空条件 return; } char ch[1000];//这个不需要开辟太大的空间这个在每一次递归的时候都会重复覆盖使用不用担心占用大量占空间的问题 sprintf(ch,%d,root-val); //解释一下这个地方这个是方便后面读取判断的时候是不是空 strcpy(str(*pi),ch); (*pi)strlen(ch); if(root-left || root-right) { //这里就是最需要先考虑的一种情况根据走字数是否为空去确定是否加 //现在是实现一下前序遍历就行 str[(*pi)](; _tree2str(root-left,str,pi); str[(*pi)]); } if(root-right) { str[(*pi)](; _tree2str(root-right,str,pi); str[(*pi)]); } } char* tree2str(struct TreeNode* root) { char* str(char*)malloc(sizeof(char)*100000); int i0; _tree2str(root,str,i);//这个函数主要进行转换把树里面的数据变为字符传的就是copy过的str str[i]\0; return str; }