这题的关键是看懂题意。特么也不提醒一下,要靠自己抽象吗???
https://blog.youkuaiyun.com/obrcnh/article/details/77996276 参考了这篇博文,博主看出了规律。B站大佬更是牛批,上来直接做。。。。
规律如下:
(1)当某个节点左右两个子节点均不为空时,应加上(),并在其中加上子节点的值;而当某个节点只存在左子节点时,则可以省略右子节点对应的()。
(2)当某个节点只存在右子节点时,则不能省略其左子节点对应的()。
这里有一个整数转换为字符串string的操作,需要牢记(借助一个字符串数组):
string convert(int a)
{
char buff[20];
sprintf(buff,%d,a);
return string(buff);
}
还有一个比较简单的方法,直接用api。即string s=to_string(int a);
class Solution {
public:
string tree2str(TreeNode* t) {
if(t == NULL) {
return "";
}
string str = to_string(t->val);
if(t->left != NULL) {
str += '(' + tree2str(t->left) + ')';
}
else if(t->right != NULL) {
str += "()";//即第二种情况,当有右节点,没有左节点时
}
if(t->right != NULL) {
str += '(' + tree2str(t->right) + ')';
}
return str;
}
};