欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

LeetCode-102. Binary Tree Level Order Traversal(层次遍历保存)

程序员文章站 2022-06-16 12:28:06
...

LeetCode-102. Binary Tree Level Order Traversal(层次遍历保存)

  • 非递归
  • 递归

题目链接

题目

LeetCode-102. Binary Tree Level Order Traversal(层次遍历保存)
这个题目和 LeetCode-637基本一样,这个可以说更简单;

非递归(BFS)

     public List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> res = new ArrayList<>();
        if(root == null )return res;
        Queue<TreeNode>queue = new LinkedList<>();
        queue.add(root);
        TreeNode top = null;
        while(!queue.isEmpty()){
            int n = queue.size();
            List<Integer>temp = new ArrayList<>();
            for(int i = 0; i < n; i++){
                top = queue.poll();
                temp.add(top.val);
                if(top.left != null)queue.add(top.left);
                if(top.right != null)queue.add(top.right);

            }
            res.add(temp);
        }
        return res;
    }

递归(DFS)

先序:

    public List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> res = new ArrayList<>();
        process(root, 0, res);
        return res;
    }

    public static void process(TreeNode root,int level,List<List<Integer>>res){
        if(root == null)return;
        if(level >= res.size()){
            List<Integer>temp = new ArrayList<>();
            temp.add(root.val);
            res.add(temp);
        }
        else {
            res.get(level).add(root.val);
        }
        process(root.left,level+1,res);
        process(root.right,level+1,res);
    }

中序:

    public List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> res = new ArrayList<>();
        process(root, 0, res);
        return res;
    }

    public static void process(TreeNode root,int level,List<List<Integer>>res){
        if(root == null)return;
        if(level >= res.size()){
            res.add(new ArrayList<>());
        }
        process(root.left,level+1,res);
        res.get(level).add(root.val);
        process(root.right,level+1,res);
    }

后序:

    public List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> res = new ArrayList<>();
        process(root, 0, res);
        return res;
    }

    public static void process(TreeNode root,int level,List<List<Integer>>res){
        if(root == null)return;
        if(level >= res.size()){
            res.add(new ArrayList<>());
        }
        process(root.left,level+1,res);
        process(root.right,level+1,res);
        res.get(level).add(root.val);
    }
相关标签: 树的层次遍历