youngyangyang04 / leetcode-master-comment

用来做评论区
0 stars 0 forks source link

[Vssue]0102.二叉树的层序遍历.md #79

Open youngyangyang04 opened 3 months ago

youngyangyang04 commented 3 months ago

https://www.programmercarl.com/0102.%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E5%B1%82%E5%BA%8F%E9%81%8D%E5%8E%86.html

SkywalkTX commented 3 months ago

这一套模板连打十个也太爽了!致敬卡哥!

aptyyds commented 3 months ago

打卡

aptyyds commented 3 months ago

做完了,爽

Du1in9 commented 2 months ago
public class Solution {  // 层序遍历的模板
    public List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> result = new ArrayList<>();
        Queue<TreeNode> q = new LinkedList<>();
        if (root == null) return result;

        q.offer(root);
        while (!q.isEmpty()) {
            List<Integer> res = new ArrayList<>();
            int size = q.size();
            for (int i = 0; i < size; i++) {
                TreeNode node = q.poll();
                res.add(node.val);
                if (node.left != null) q.offer(node.left);
                if (node.right != null) q.offer(node.right);
            }
            result.add(res);
        }
        return result;
    }
}
// 在 return result; 前加上 Collections.reverse(result);

// 1. 将 List<List<Integer>> result 改为 List<Integer> result
// 2. 将 List<Integer> res = new ArrayList<>(); 改为 int res = 0;
// 3. 将 res.add(node.val); 改为 res = node.val;

// 1. 将 List<List<Integer>> result 改为 List<Double> result
// 2. 将 List<Integer> res = new ArrayList<>(); 改为 Double sum = 0.0;
// 3. 将 res.add(node.val); 改为 sum += node.val;
// 4. 将 result.add(res); 改为 result.add(sum / size);

// 1. 将 Queue<TreeNode> q 改为 Queue<Node> q
// 2. 将 TreeNode node 改为 Node node
// 3. 将对左右节点的遍历, 改为对所有孩子的遍历, 即: 
// for(Node child : node.children) {if (child != null) q.offer(child);}

// 1. 将 List<List<Integer>> result 改为 List<Integer> result
// 2. 将 List<Integer> res = new ArrayList<>(); 改为 int max = Integer.MIN_VALUE;
// 3. 将 res.add(node.val); 改为 if(node.val > max) max = node.val;

// 1. 将 TreeNode 改为 Node, 将 result 改为 root
// 2. 将 List<Integer> res = new ArrayList<>(); 改为 Node temp = null;
// 3. 将 res.add(node.val); 改为 if(i > 0) {temp.next = node;} temp = node;
// 4. 将 result.add(res); 改为 temp.next = null;

// 1. 将 List<List<Integer>> result 改为 int result = 0;
// 2. 将 List<Integer> res 改为 result++;
// 3. 删掉 res.add(node.val); 删掉 result.add(res);

// 1. 将 List<List<Integer>> result 改为 int result = 0;
// 2. 将 List<Integer> res 改为 result++;
// 3. 删掉 res.add(node.val); 删掉 result.add(res);
// 4. 增加 if (node.left == null && node.right == null) return result;
redrumq commented 1 month ago

DekuWang commented 1 month ago

战斗,爽

ZXiaoheng commented 1 month ago

两层循环太复杂了。用我的一层循环。 class Solution: def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]: res = [] if root is None: return res

    root_stack = [root]
    next_stack = []
    one_floor = []
    while root_stack:
        one_node = root_stack.pop(0)
        one_floor.append(one_node.val)
        if one_node.left:
            next_stack.append(one_node.left)
        if one_node.right:
            next_stack.append(one_node.right)

        if not root_stack:
            root_stack = next_stack
            res.append(one_floor)
            one_floor = []
            next_stack = []

    return res
zgg666 commented 4 weeks ago

答案可以做成tab切换的形式吗?这个排版太费了

Kaiyuecui commented 2 weeks ago

打卡