606.根据二叉树创建字符串

91 阅读1分钟

题目:
给你二叉树的根节点 root ,请你采用前序遍历的方式,将二叉树转化为一个由括号和整数组成的字符串,返回构造出的字符串。

空节点使用一对空括号对 "()" 表示,转化后需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。
算法:
方法一:dfs
前序遍历: 两个子节点都为空的时候,不带括号直接返回val,
左括号为空,需要返回空括号,以区分左右子节点的是哪个为空
右括号为空,省略括号

func tree2str(root *TreeNode) string {
	var dfs func(node *TreeNode) string
	dfs = func( node *TreeNode) string {
		if node == nil {
			return ""
		}
		if node.Left == nil && node.Right == nil {
			return fmt.Sprintf("%d", node.Val)
		}
		str := fmt.Sprintf("%d(%s)", node.Val, dfs(node.Left))
		if node.Right != nil {
			str = str + fmt.Sprintf("(%s)", dfs(node.Right))
		}
		return str
	}
	
	return dfs(root)
}