zoukankan      html  css  js  c++  java
  • 根据二叉树创建字符串

    你需要采用前序遍历的方式,将一个二叉树转换成一个由括号和整数组成的字符串。
    
    空节点则用一对空括号 "()" 表示。而且你需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。
    
    示例 1:
    
    输入: 二叉树: [1,2,3,4]
           1
         /   
        2     3
       /    
      4     
    
    输出: "1(2(4))(3)"
    
    解释: 原本将是“1(2(4)())(3())”,
    在你省略所有不必要的空括号对之后,
    它将是“1(2(4))(3)”。
    示例 2:
    
    输入: 二叉树: [1,2,3,null,4]
           1
         /   
        2     3
           
          4 
    
    输出: "1(2()(4))(3)"
    
    解释: 和第一个示例相似,
    除了我们不能省略第一个对括号来中断输入和输出之间的一对一映射关系。
    StringBuilder sb = new StringBuilder();
        TreeNode pre = null;
        public String tree2str(TreeNode t) {
            if (t == null) return "";
            helper(t, pre);
            return sb.substring(1, sb.length() - 1);
        }
    
        private void helper(TreeNode root, TreeNode pre) {
            if (root == null) return;
            //前序遍历
            //1.如果当前节点为父节点的右子树且左子树为空,括号不能省略
            if (pre != null && pre.left == null && pre.right == root) {
                sb.append("()");
            }
            sb.append("(").append(root.val);
            pre = root;
            helper(root.left, pre);
            helper(root.right, pre);
            //遍历完当前节点后关闭括号
            sb.append(")");
        }
  • 相关阅读:
    1767:字符合并
    成绩单
    floj 2264
    floj 2265 【lxs Contest #141】航海舰队
    CF932D Tree
    1745:分组
    1744:跳台阶
    Xamarin.Forms之跨平台性能
    Xamarin.Forms之部署和测试(性能)
    Xamarin.Forms数据绑定
  • 原文地址:https://www.cnblogs.com/du001011/p/11247752.html
Copyright © 2011-2022 走看看