LeetCode刷题笔录 Binary Tree Level Order Traversal

本文记录了LeetCode上二叉树层次遍历的问题,采用BFS方法解决。通过维护两个ArrayList,current用于存储当前层节点,parent用于存储上一层节点。每次遍历将上一层节点的左右子节点加入到current,逐层推进完成层次遍历。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).

For example:
Given binary tree {3,9,20,#,#,15,7},

    3
   / \
  9  20
    /  \
   15   7

return its level order traversal as:

[
  [3],
  [9,20],
  [15,7]
]


就是个层序遍历,没啥难的。想起CTCI里有一个差不多的题,用了一个BFS的解法,不是用Queue,就实现了一下。这里注意LeetCode要求的返回值是ArrayList<Integer>,不是ArrayList<TreeNode>.

具体做法就是两个ArrayList,current 和 parent。parent是上一层的所有node,对于parent的每一个node,将其左儿子和右儿子都放到current里。每层创建一个新current。

public class Solution {
    public ArrayList<ArrayList<Integer>> levelOrder(TreeNode root) {
        ArrayList<ArrayList<TreeNode>> result = new ArrayList<ArrayList<TreeNode>>();
        //the above code generates an array of arrays of TreeNodes, while the problems ask for Integers.
        ArrayList<ArrayList<Integer>> trueResult = new ArrayList<ArrayList<Integer>>();
        if(root == null)
            return trueResult;
        
        ArrayList<TreeNode> current = new ArrayList<TreeNode>();
        current.add(root);

        while(current.size() > 0){
            //add the previous level into the final result
            result.add(current);
            
            ArrayList<TreeNode> parent = current;
            current = new ArrayList<TreeNode>();
            
            for(TreeNode node: parent){
                if(node.left != null)
                    current.add(node.left);
                if(node.right != null)
                    current.add(node.right);
            }
           
        }
        
        for(ArrayList<TreeNode> nodeArr : result){
            ArrayList<Integer> intArr = new ArrayList<Integer>();
            for(TreeNode node : nodeArr){
                intArr.add(node.val);
            }
            trueResult.add(intArr);
        }
        return trueResult;
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值