【Lintcode】1137. Construct String from Binary Tree

題目地址:

https://www.lintcode.com/problem/construct-string-from-binary-tree/description

參考https://blog.csdn.net/qq_46105170/article/details/106185007。這裏採取DFS有返回值的寫法:

public class Solution {
    /**
     * @param root: the root of tree
     * @return: return a string
     */
    public String tree2str(TreeNode root) {
        // write your code here
        return dfs(root).toString();
    }
    
    private StringBuilder dfs(TreeNode root) {
        StringBuilder sb = new StringBuilder();
        // 空樹則直接返回空串
        if (root == null) {
            return sb;
        }
        // 非空樹則先append樹根
        sb.append(root.val);
        // 若走到葉子,則左右子樹都是空樹,不用append任何括號,返回sb
        if (root.left == null && root.right == null) {
            return sb;
        }
        // 如果不是葉子,那麼左子樹的括號是一定要加的
        sb.append('(').append(dfs(root.left)).append(')');
        // 接着判斷右子樹是否非空,非空的時候才append括號,然後繼續DFS
        if (root.right != null) {
            sb.append('(').append(dfs(root.right)).append(')');
        }
        
        return sb;
    }
}

class TreeNode {
    int val;
    TreeNode left, right;
    TreeNode(int x) {
        val = x;
    }
}

時空複雜度O(n)O(n),遞歸棧深度是樹高hh,但sb需要O(n)O(n)空間。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章