你需要采用前序遍历的方式,将一个二叉树转换成一个由括号和整数组成的字符串。
空节点则用一对空括号 “()” 表示。而且你需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。
/**
* class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
StringBuilder result = new StringBuilder();
public String tree2str(TreeNode t) {
func(t);
return result.toString();
}
//递归
private void func(TreeNode tree) {
if (tree == null) return;
//左右子树都为空
if (tree.left == null && tree.right == null) {
result.append(tree.val);
return;
}
result.append(tree.val);
//左子树拼接
result.append('(');
func(tree.left);
result.append(')');
//右子树拼接,为空不需要加括号
if (tree.right == null) return;
result.append('(');
func(tree.right);
result.append(')');
}
}
二叉树用递归最舒服,这道题理解错了题意,提交错了两个次后,看官方解释才知道了具体要干什么。