zoukankan      html  css  js  c++  java
  • 力扣226. 翻转二叉树

    226. 翻转二叉树

    翻转一棵二叉树。

    示例:

    输入:

    输出:

    思路一:递归

    直接进行递归,交换左右孩子后,对左右孩子分别递归交换左右孩子

     1 class Solution {
     2     public TreeNode invertTree(TreeNode root) {
     3         // 如果根节点为null, 直接返回null
     4         if(root == null){
     5             return null;
     6         }
     7         // 交换root的左右子树
     8         TreeNode temp = root.left;
     9         root.left = root.right;
    10         root.right = temp;
    11         // 递归交换左右子树
    12         invertTree(root.left);
    13         invertTree(root.right);
    14         return root;
    15     }
    16 }

    复杂度分析

    时间复杂度:需要对每个结点进行一次递归,所以时间复杂度为O(n), n等于结点个数

    空间复杂度:每次递归都需要一个临时变量temp, 但是这是常数级别的,最大递归深度为树的高度,所以复杂度为O(h), 由于树的平衡性未知,所以空间复杂度为O(n) 而不是O(logn)

    思路二:BFS

    利用BFS遍历结点,在每次弹出队首结点时,将结点的左右孩子进行交换,然后入队左右孩子

     1 class Solution {
     2     public TreeNode invertTree(TreeNode root) {
     3         // 利用BFS遍历结点,在每次弹出队首结点时,将结点的左右孩子进行交换,然后入队左右孩子
     4         Queue<TreeNode> queue = new LinkedList<TreeNode>();
     5         if(root == null)
     6             return null;
     7         queue.offer(root);
     8         while(!queue.isEmpty()){
     9             TreeNode top = queue.poll();
    10             TreeNode temp = top.left;
    11             top.left = top.right;
    12             top.right = temp;
    13             if(top.left != null)
    14                 queue.offer(top.left);
    15             if(top.right != null)
    16                 queue.offer(top.right);
    17         }
    18         return root;
    19     }
    20 }

    复杂度分析

    时间复杂度:同思路一一样,都是对树的每个结点进行了一次访问,所以时间复杂度为O(n)

    空间复杂度:队列中只会存储一层的结点,所以最坏情况下,对于一颗完整二叉树来说,叶子节点那一层拥有n/2=O(n) 个节点。

    思路来源:

    https://leetcode-cn.com/problems/invert-binary-tree/solution/fan-zhuan-er-cha-shu-by-leetcode/

  • 相关阅读:
    scala-for高级用法
    scala-for
    numpy每行,没列中的最小值
    NLP
    sql-server笔记-sql
    openlayers加载geoserver的WMS服务出现点标注显示不全
    oracle删除表
    idea-debug
    python-windows安装相关问题
    mybatis-oracle 新增序列
  • 原文地址:https://www.cnblogs.com/hi3254014978/p/12944669.html
Copyright © 2011-2022 走看看