1. 程式人生 > 其它 >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();
//    }
}