题目
代码部分一(34ms)
class Solution {
public String tree2str(TreeNode t) {
if(t == null)
return "";
if(t.left == null && t.right == null)
return t.val + "";
else if(t.left == null)
return t.val + "()" + "(" + tree2str(t.right) +")";
else if(t.right == null)
return t.val + "(" + tree2str(t.left) + ")";
return t.val + "(" + tree2str(t.left) + ")" + "(" + tree2str(t.right) + ")";
}
}
-
若树为空,返回null
-
若当前节点为叶子节点,返回 t.val 的字符串
-
若当前节点的左子节点为空,右子节点不为空,需要加上字符串()返回 “t.val()(t.right.val)”(右遍历)
-
若当前左子节点不为空,右子节点为空,返回 “t.val(t.left.val)" (左遍历)
-
若当前节点左右子节点都不为空,返回结果并递归左右子树
代码部分二(10ms)
class Solution {
public String tree2str(TreeNode t) {
StringBuilder stringBuilder = new StringBuilder();
tree2str(t,stringBuilder);
return stringBuilder.toString();
}
public void tree2str(TreeNode t,StringBuilder stringBuilder) {
if (t == null){
return;
}
stringBuilder.append(t.val);
if (t.left != null || t.right != null) {
stringBuilder.append("(");
tree2str(t.left, stringBuilder);
stringBuilder.append(")");
}
if (t.right != null) {
stringBuilder.append("(");
tree2str(t.right, stringBuilder);
stringBuilder.append(")");
}
}
}
-
调用重载函数()
-
若树为空,返回
-
将当前节点值存入 stringBuilder 中
-
若当前节点左右子节点都不为空,存入左节点值和括号
-
若当前节点左子节点为空,右子节点不为空,存入右节点值和括号