手撸二叉树之根据二叉树创建字符串

网友投稿 272 2022-11-28

手撸二叉树之根据二叉树创建字符串

今天给大家带来的关于二叉树相关的算法题是根据二叉树创建字符串,正文如下:

题目

你需要采用前序遍历的方式,将一个二叉树转换成一个由括号和整数组成的字符串。

空节点则用一对空括号 "()" 表示。而且你需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。

示例1:

输入: 二叉树: [1,2,3,4] 1 / \ 2 3 / 4输出: "1(2(4))(3)"解释: 原本将是“1(2(4)())(3())”,

示例2:

输入: 二叉树: [1,2,3,null,4] 1 / \ 2 3 \ 4输出: "1(2()(4))(3)"解释: 和第一个示例相似,

思路分析

根据题目给出的示例分析来看,我们可以用二叉树的前序遍历来解答此题。

由于需要加上括号,可以分为以下4种情况:

如果当前节点有两个孩子,那我们在递归时,需要在两个孩子的结果外都加上一层括号;如果当前节点没有孩子,那我们不需要在节点后面加上任何括号;如果当前节点只有左孩子,那我们在递归时,只需要在左孩子的结果外加上一层括号,而不需要给右孩子加上任何括号;如果当前节点只有右孩子,那我们在递归时,需要先加上一层空的括号 () 表示左孩子为空,再对右孩子进行递归,并在结果外加上一层括号。

通过上面的4中情况,我们就可以创建最终的字符串了。

代码实现

/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */class Solution { public String tree2str(TreeNode root) { if (root == null) { return ""; } // 没有左,右子节点 if (root.left == null && root.right == null) { return root.val + ""; } // 右节点为空 if (root.right == null) { return root.val + "(" + tree2str(root.left) + ")"; } return root.val + "(" + tree2str(root.left) + ")" + "(" + tree2str(root.right) + ")"; }}

最后

复杂度分析:

时间复杂度:O(N),其中 N 是二叉树中的节点数目。空间复杂度:O(N),在最坏情况下,会递归 N 层,需要 O(N) 的栈空间。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:嵌入式设计的图形化编程你了解吗
下一篇:电阻式触摸屏设计中ADS7846的应用
相关文章

 发表评论

暂时没有评论,来抢沙发吧~