606.根据二叉树创建数组(javascript)606.ConstructStringfromBinaryTree

原创
小哥 3年前 (2022-11-10) 阅读数 5 #大杂烩

给你二叉树的根节点 root ,请使用预序遍历方法将二叉树转换为由括号和整数组成的字符串,并返回构造的字符串。

空节点使用一对空括号对。 “()” 指示转换后需要省略所有不影响字符串和原始二叉树之间一对一映射的空括号对。
Given the root of a binary tree, construct a string consisting of parenthesis and integers from a binary tree with the preorder traversal way, and return it.

Omit all the empty parenthesis pairs that do not affect the one-to-one mapping relationship between the string and the original binary tree.

示例 1:

输入:root = [1,2,3,4]
输出:"1(2(4))(3)"
说明:经过初始转换后,即可获得。 "1(2(4)())(3()())" ,但在省略所有不必要的空括号对后,字符串应为。"1(2(4))(3)" 。

示例 2:

输入:root = [1,2,3,null,4]
输出:"1(2()(4))(3)"
说明:与第一个示例类似,但不能省略第一个空括号对,否则输入和输出之间的一对一映射将被破坏。

提示:

  • 树中的节点范围为 [1, 104]
  • -1000 <= Node.val <= 1000

解题思路

我们可以使用递归方法获得二叉树的预序遍历,并在递归时添加额外的括号。

  1. 如果当前节点没有子节点,那么我们不需要在节点后面添加任何括号;
  2. 如果当前节点只有左子节点,那么当我们递归时,我们只需要在左子节点的结果之外添加一个括号,而不是向右子节点添加任何括号;
  3. 如果当前节点有两个子节点,那么当我们递归时,我们需要在两个子节点的结果中添加一个括号;
  4. 如果当前节点只有正确的子节点,那么我们需要在递归之前添加一个空括号。 ‘()’ 指示左子项为空,递归右子项,并在结果中添加括号。
    第三步与第四步相同。如果左子项为空,则(左子项)等同于()

    var tree2str = function (root) { if (!root) return "" if (!root.left && !root.right) { return "" + root.val } if (!root.right) { return root.val + "(" + tree2str(root.left) + ")" } return root.val + "(" + tree2str(root.left) + ")(" + tree2str(root.right) + ")" };

leetcode: https://leetcode-cn.com/problems/construct-string-from-binary-tree/

版权声明

所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除