首页 > 编程语言 >代码随想录算法训练营第十五天| 二叉树的层序遍历

代码随想录算法训练营第十五天| 二叉树的层序遍历

时间:2022-11-13 23:55:09浏览次数:54  
标签:遍历 TreeNode root 随想录 pop 二叉树 第十五天 treeNodes size

二叉树的层序遍历:https://leetcode.cn/problems/binary-tree-level-order-traversal/

层序遍历使用队列实现:用size记录当前层的个数,size--控制弹出元素的个数,保证当前层的元素都弹出后,再去遍历弹出下一层的元素。

public List<List<Integer>> levelOrder(TreeNode root) {
        ArrayList<List<Integer>> res = new ArrayList<>();
        if (root == null){
            return res;
        }
        //借助队列
        LinkedList<TreeNode> treeNodes = new LinkedList<>();
        treeNodes.offer(root);
        while (!treeNodes.isEmpty()){
            ArrayList<Integer> list = new ArrayList<>();
            int size = treeNodes.size();
            while (size-- > 0){//不能使用treeNodes.size()--,因为treeNodes.size()是不断变化的
                TreeNode pop = treeNodes.pop();
                list.add(pop.val);
                if (pop.left != null){
                    treeNodes.offer(pop.left);
                }
                if (pop.right != null) {
                    treeNodes.offer(pop.right);
                }
            }
            res.add(list);
        }
        return res;
    }

226.反转二叉树:https://leetcode.cn/problems/invert-binary-tree/

广度优先搜索BFS:遍历每一层的时候翻转二叉树

深度优先搜索DFS:

指针交换、而不是只是交换值。前序和后序最直接。

递归遍历需要再理解理解。

class Solution{
    //DFS、递归
    public TreeNode invertTree(TreeNode root) {
        if (root == null) {
            return null;
        }
        //后序遍历
        invertTree(root.left);
        invertTree(root.right);
        reverseNode(root);

        return root;
    }
    private void reverseNode(TreeNode root) {
        TreeNode temp = root.left;
        root.left = root.right;
        root.right = temp;
    }
}

 

标签:遍历,TreeNode,root,随想录,pop,二叉树,第十五天,treeNodes,size
From: https://www.cnblogs.com/li-keke/p/16887752.html

相关文章

  • 104. 二叉树的最大深度 ----- 递归,DFS(深度优先搜索),BFS(广度优先搜索)
    给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树[3,9,20,null,null,......
  • 101. 对称二叉树 ----- 二叉树、递归、迭代
    给你一个二叉树的根节点root,检查它是否轴对称。 示例1:  输入:root=[1,2,2,3,4,4,3]输出:true示例2:  输入:root=[1,2,2,null,3,null,3]输出:false 提......
  • 二叉树理论基础篇
    目录二叉树理论基础篇二叉树的种类满二叉树完全二叉树二叉搜索树平衡二叉搜索树二叉树的存储方式二叉树的遍历方式二叉树的定义总结其他语言版本二叉树理论基础篇说到二......
  • 94. 二叉树的中序遍历 ---- 递归
    给定一个二叉树的根节点root,返回它的中序 遍历。 示例1:  输入:root=[1,null,2,3]输出:[1,3,2]示例2:输入:root=[]输出:[]示例3:输入:root=[1]输出:[1] ......
  • 代码随想录训练营第三十一天 | 贪心算法
    贪心算法的核心思想是在每一步决策中都找到局部最优解122.买卖股票的最佳时机classSolution{publicintmaxProfit(int[]prices){intn=prices.le......
  • 【leetcode_C++_二叉树_day12】层序遍历 10 && 226.翻转二叉树&&101. 对称二叉树
    1.层序遍历学会二叉树的层序遍历,可以一口气打完以下十题:102.二叉树的层序遍历107.二叉树的层次遍历II199.二叉树的右视图637.二叉树的层平均值429.N叉树的层序遍......
  • set/multiset-有序二叉树
    3.8set/multiset容器3.8.1set基本概念简介:所有元素都会在插入时自动被排序本质:set/multiset属于关联式容器,底层结构是用二叉树实现。set和multiset区别:set......
  • 代码随想录Day22
    LeetCode222.完全二叉树的节点个数 给出一个完全二叉树,求出该树的节点个数。示例1:输入:root=[1,2,3,4,5,6]输出:6示例2:输入:root=[]输出:0示例3:输入:ro......
  • 一眼看出二叉树中序遍历结果的诀窍
    1.二叉树方法:在二叉树下画一条线作为X轴,把所有节点投影到X轴上,从左到右排列好,得到的结果就是中序遍历的结果。例如: 得到“HDIBEAFJCG”是中序遍历的结果。在面试或......
  • 代码随想录Day21
    LeetCode111.给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,......