1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| class Solution { private StringBuilder ans;
public String tree2str(TreeNode root) { if (root == null) { return ""; } ans = new StringBuilder(); helper(root); return ans.toString(); }
private void helper(TreeNode node) { if (node == null) { return; } ans.append(node.val); if (node.left == null && node.right == null) { return; } ans.append('('); helper(node.left); ans.append(')'); if (node.right != null) { ans.append('('); helper(node.right); ans.append(')'); } } }
|
DFS即可. 如果左右都没child, 那直接return, 否则左边即使没有node, 也要把括号加上, 因为如果左边没node, 此时右边一定会有. 这样我们加空括号证明左边没node, 而后面的括号里的东西代表的是右支的东西.
时间复杂度: O(n)
空间复杂度: O(n) 假设每个支都有自己的括号, 那就是n对括号. 再加上n个val, 于是就是3n长度的字符, 也就是O(n). 递归需要用栈, 那就是O(n)