根据二叉树创建字符串
你需要采用前序遍历的方式,将一个二叉树转换成一个由括号和整数组成的字符串。
空节点则用一对空括号 “()” 表示。而且你需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。
示例 1:
输入: 二叉树: [1,2,3,4]
1
/ \
2 3
/
4
输出: "1(2(4))(3)"
解释: 原本将是“1(2(4)())(3())”,
在你省略所有不必要的空括号对之后,
它将是“1(2(4))(3)”。
示例 2:
输入: 二叉树: [1,2,3,null,4]
1
/ \
2 3
\
4
输出: "1(2()(4))(3)"
解释: 和第一个示例相似,
除了我们不能省略第一个对括号来中断输入和输出之间的一对一映射关系。
思路+代码+注释:
public String tree2str(TreeNode t) {
/*
思路:递归遍历树得节点,根据示例总结出每遍历一个节点在节点值前加(,如果该节点没有左子节点有右子节点那么在节点后追加(),递归遍历左右子节点遍历完后
追加)封尾,当节点为空时返回,最后去掉收尾得括号。
*/
if (t==null)
{
return "";
}
StringBuilder sb=new StringBuilder();
tree2str(t,sb);
String res=sb.toString();
return res.substring(1,res.length()-1);
}
private void tree2str(TreeNode node,StringBuilder res)
{
if (node==null)
{
return;
}
res.append("("+node.val);
if (node.left==null && node.right!=null)
{
res.append("()");
}
tree2str(node.left,res);
tree2str(node.right,res);
res.append(")");
}