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

LeetCode226.翻转二叉树

程序员文章站 2022-05-18 14:18:38
...

题目描述

翻转一棵二叉树。

输入:

     4
   /   \
  2     7
 / \   / \
1   3 6   9

输出:

     4
   /   \
  7     2
 / \   / \
9   6 3   1

思路

1.递归

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public TreeNode invertTree(TreeNode root) {
        if(root == null) return null;

        TreeNode left = invertTree(root.left);
        TreeNode right = invertTree(root.right);

        root.left = right;
        root.right = left;
        return root;
    }
}

空间复杂度:O(n),递归就需要栈存放方法,方法个数为数的高度h∈O(n)
时间复杂度:O(n),每个节点都被访问一次

迭代

 public TreeNode invertTree(TreeNode root) {
        if(root == null) return null;

        Queue<TreeNode> queue = new LinkedList<>();
        queue.add(root);
        while(!queue.isEmpty()){
            TreeNode current = queue.poll();
            TreeNode temp =  current.left;
            current.left = current.right;
            current.right = temp;
            if(current.left != null) queue.add(current.left);
            if(current.right != null) queue.add(current.right);
        }
        return root;
    }

空间复杂度:O(n),队列中包含所有的节点
时间复杂度:O(n),每个节点都入队一次

小结

LinkedList的常用方法

  • add(E e):在链表后添加一个元素;
  • offer(E e):在链表尾部插入一个元素
  • add(int index,E element):在指定位置插入一个元素。
  • push(E e):在链表头部插入一个元素
  • poll():查询并移除第一个元素
  • peek():获取第一个元素,但是不移除
相关标签: LeetCode