

题解:
思想:按照先序遍历的思想,在遍历打印数字之前打印一下()
先序遍历是先打印根节点,然后递归左右节点
伪代码:
public void dfs(TreeNode root) {
//打印root.val
dfs(root.left);
dfs(root.right);
}
这道题就按照上述思想:
public void dfs(TreeNode root) {
//打印“(”
//打印root.val
dfs(root.left);
dfs(root.right);
//打印“)”
}
然后就是注意细节:当左边为空,右边不为空时,还需要额外打印一个“()”
代码:
class Solution {
StringBuffer sb = new StringBuffer();
public String tree2str(TreeNode root) {
dfs(root);
//去掉左右括号
return sb.substring(1, sb.length()-1);
}
public void dfs(TreeNode root) {
sb.append("(");
sb.append(root.val);
if(root.left != null) {
//左边不为空,进入左边进行递归
dfs(root.left);
}else if(root.right != null) {
//左边为空 且右边不为空,打印一个()
sb.append("()");
}
//左边右边都不为空,继续进入右边递归
if(root.right != null) {
dfs(root.right);
}
//表示一边的树已经走完,打印)
sb.append(")");
}
}
还有要注意最后返回的StringBuffer要把头部与尾部的()去除,使用substring()进行裁剪
1万+

被折叠的 条评论
为什么被折叠?



