手撸二叉树之根据二叉树创建字符串
Hello, 大家好,今天是我参加 8 月更文的第 21 天,今天给大家带来的关于二叉树相关的算法题是根据二叉树创建字符串,正文如下:
题目
你需要采用前序遍历的方式,将一个二叉树转换成一个由括号和整数组成的字符串。
空节点则用一对空括号 "()" 表示。而且你需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。
示例 1:
复制代码
示例 2:
复制代码
思路分析
根据题目给出的示例分析来看,我们可以用二叉树的前序遍历来解答此题。
由于需要加上括号,可以分为以下 4 种情况:
如果当前节点有两个孩子,那我们在递归时,需要在两个孩子的结果外都加上一层括号;
如果当前节点没有孩子,那我们不需要在节点后面加上任何括号;
如果当前节点只有左孩子,那我们在递归时,只需要在左孩子的结果外加上一层括号,而不需要给右孩子加上任何括号;
如果当前节点只有右孩子,那我们在递归时,需要先加上一层空的括号 () 表示左孩子为空,再对右孩子进行递归,并在结果外加上一层括号。
通过上面的 4 中情况,我们就可以创建最终的字符串了。
代码实现
复制代码
最后
复杂度分析:
时间复杂度:O(N),其中 N 是二叉树中的节点数目。
空间复杂度:O(N),在最坏情况下,会递归 N 层,需要 O(N) 的栈空间。
版权声明: 本文为 InfoQ 作者【HelloWorld杰少】的原创文章。
原文链接:【http://xie.infoq.cn/article/6c03190c6a4a7d21e2cd5d14f】。文章转载请联系作者。
评论