首页 热点专区 小学知识 中学知识 出国留学 考研考公
您的当前位置:首页正文

655. Print Binary Tree

来源:要发发知识网

这是刚才的Contest的第三题。这题我的思路是,
第一步:算出树的深度
第二步:BFS遍历Tree,把NULL节点也存下来
第三步:找出一个关于深度的公式,把第二步保存的值构造成结果

其中第二步,我一直想写一个能够构造leetcode的那种serialization的函数。。这题的关键好像就是那个。

然后我就不想想了,怠惰。后面更吧。好懒啊。

--

发现之前这个思路不太可行,第二步不太会。

看了下答案,就是dfs做层序遍历的那种方法,在每层get相应的list把值加进去。

public class Solution {
    private int getHeight(TreeNode root) {
        if (root == null)
            return 0;
        return 1 + Math.max(getHeight(root.left), getHeight(root.right));
    }

    private void dfs(List<List<String>> res, TreeNode root, int left, int right, int level) {
                //不需要也不能有left>=right的条件
        if (root == null)
            return;
        int mid = left + (right - left) / 2;
        res.get(level).set(mid, String.valueOf(root.val));
        dfs(res, root.left, left, mid, level + 1);
        dfs(res, root.right, mid + 1, right, level + 1);
    }

    public List<List<String>> printTree(TreeNode root) {
        int height = getHeight(root);
                //左移运算符的优先级低,要加括号。
        int width = (1 << height) - 1;
        List<List<String>> res = new ArrayList<>();
        for (int i = 0; i < height; i++) {
            List<String> item = new ArrayList<>();
            for (int j = 0; j < width; j++) {
                item.add("");
            }
            res.add(new ArrayList<String>(item));
        }
        dfs(res, root, 0, width - 1, 0);
        return res;
    }
}
显示全文