606. 根据二叉树创建字符串(2022-3-19)
你需要采用前序遍历的方式,将一个二叉树转换成一个由括号和整数组成的字符串。
空节点则用一对空括号 “()” 表示。而且你需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。
示例 1:
示例 2:
解题思路
运用简单递归去遍历节点,在遍历「左右子树」时添加括号;需要注意的是如果左右子节点中只有右节点存在,那就还需要给左边的节点用()
空出来
var tree2str = function(root) {
let ret = []
dfs = function (node){
if(node == null) return
const left = node.left,right = node.right,val = node.val
ret.push(val)
if(left != null || right != null){
ret.push('(')
dfs(left)
ret.push(')')
}
if(right != null){
ret.push('(')
dfs(right)
ret.push(')')
}
}
dfs(root)
return ret.join('')
};
在浏览大佬们的题解的时候,发现了一个贼简洁、易懂的写法,既然都是递归了,我们为什么不用本身的函数去递归调用呢。像这样:
var tree2str = function(root) {
if(root == null) return ''
const left = (root.left||root.right) ? `(${tree2str(root.left)})` : ''
const right = root.right ? `(${tree2str(root.right)})`:''
return root.val + left+ right
}