根据二叉树创建字符串(力扣606题)
题目
你需要采用前序遍历的方式,将一个二叉树转换成一个由括号和整数组成的字符串。
空节点则用一对空括号 “()” 表示。而且你需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。
思路
1,通过先序遍历,用StringBuilder拼接大字符串
2,括号问题
当左树右树都空,可以省略括号
当左树空,右树不空,不能省略括号
当左树不空,右树空,可以省略括号
代码实现
StringBuilder sb = new StringBuilder();
public String tree2str(TreeNode root) {
if(root == null){
return "";
}
preOrder(root);
return sb.toString();
}
//"1(2(4))(3)"
public void preOrder(TreeNode root) {
if(root == null){
return;
}
//根
sb.append(root.val);
//左树不空
if(root.left != null){
sb.append("(");
preOrder(root.left);
sb.append(")");
}else{
//左树为空,判断右树是否空
if(root.right != null) {
sb.append("()");
}
sb.append("");
}
//右树不空
if(root.right != null){
sb.append("(");
preOrder(root.right);
sb.append(")");
}
}