根据示例描述总结一下规律,前序遍历顺序根-左-右
先保存根,然后遍历根的左子树,如果左子树为空,要先补一对括号,然后遍历右子树,如果左子树非空,则先用括号扩起左子树,然后递归遍历左子树。
右子树如果为空,直接省略,如果非空,用括号括起来,递归遍历右子树
class Solution {
public:
void tree2str(TreeNode* root,string& ret){
if(nullptr == root){
return;
}
ret += to_string(root->val);
//to_string方法转化后可以直接得到一个string类型的对象。
if(nullptr == root->left){
if(root->right){
//左空右不空,要补括号。
ret +="()";
}
}else{
//左非空,先用括号吧左子树括起来,然后当一个独立的树去遍历
ret += "(";
tree2str(root->left,ret);
ret += ")";
}
if(root->right){
ret += "(";
tree2str(root->right,ret);
ret += ")";
}
}
string tree2str(TreeNode* root) {
string ret;//最终结果
tree2str(root,ret);
return ret;
}
};