其他分享
首页 > 其他分享> > LeetCode 606. 根据二叉树创建字符串

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

作者:互联网

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

Solution

思路:最开始的思路就是简单的先序遍历,然后就可以得到带有空括号的字符串,再处理即可,代码都写了,然后发现有问题,还是在遍历的时候控制比较好,然后就开始无脑乱改,发现逻辑是通的,不过代码已经成狗屎了,删了重新写,梳理逻辑,1Y

主要是叶节点和非叶节点的),应该是叶节点不处理, 统一回退处理,然后存在孩子之一必有(,然后就是转右孩子的细节)(

class Solution {
    StringBuilder str = new StringBuilder();
    public String tree2str(TreeNode root) {
        if (root == null) return "";
        preOrder(root);
        return str.toString();
    }

    void preOrder(TreeNode p) {
        str.append(p.val);
        if (p.left == p.right && p.left == null) {   //处理叶节点 不需要这里加')';
            return;
        }
        if (p.left != null || p.right != null) {   //左边不能省 所有存在孩子之一就要有'('
            str.append('(');
        }
        if (p.left != null) {   // 左孩子
            preOrder(p.left);
        }
        if (p.right != null) {  // 转右孩子的时候 要“封好”又要“开始”
            str.append(')');
            str.append('(');
            preOrder(p.right);
        }
        str.append(')'); //回退的时候加')'
    }

}
//狗屎代码!
class Solution {
    StringBuilder str = new StringBuilder();
    public String tree2str(TreeNode root) {
        if (root == null) return "";
        preOrder(root);
        return str.toString();
//        return dealString(str.toString());
    }

    void preOrder(TreeNode p) {
//        str.append(p.val);
//        if (p.left != null || p.right != null) {
//            str.append('(');
//        }
//        if (p.left != null) {
//            preOrder(p.left);
//        }
//        if (p.left == null && p.right != null) {
//            str.append(')');
//        }
//        if (p.left != null || p.right != null) {
//            str.append('(');
//        }
//        if (p.right != null) {
//            preOrder(p.right);
//        }
//        if (p.left == null && p.right != null) {
//            str.append(')');
//        }
//        str.append(')');
    }

//    String dealString(String res) {
//        StringBuilder ans = new StringBuilder();
//        char[] s = res.toCharArray();
//        int len = res.length();
//        int idx = 0;
//        while (idx + 1 < len) {
//            if (s[idx] == '(' && s[idx + 1] == ')') {
//                idx += 2;
//            }
//            ans.append(s[idx++]);
//        }
//        return ans.toString();
//    }
}

标签:preOrder,606,right,二叉树,str,null,LeetCode,append,left
来源: https://www.cnblogs.com/ACMerszl/p/16025694.html