vlambda博客
学习文章列表

数据结构与算法—翻转二叉树

大家好,我是宇哥


题目:226. 翻转二叉树

翻转一棵二叉树。

示例:

输入:

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

输出:

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


解题思路

深度优先和广度优先

深度优先思路

  1. 判断根节点,不空加入队列中

  2. 递归的交换节点

  3. 返回替换后的节点

数据结构与算法—翻转二叉树

代码

 public TreeNode invertTree(TreeNode root) { if (root == null) return null; // 交换节点 TreeNode temp = root.left; root.left = invertTree(root.right); root.right = invertTree(temp); return root; }

复杂度

    时间复杂度:O(N),其中N为二叉树节点数,循环会遍历每一个节点

    空间复制度:O(N),其中N为二叉树的节点数,在二叉树比较平衡的情况下,高度与节点树成对数即Olog(N)。最坏的情况成链O(N)

    

广度优先思路

  1. 判断根节点,不空加入队列中

  2. 循环队列数据

  3. 左右节点替换

  4. 如果左右节点不空,向队列中添加

代码

class Solution { public TreeNode invertTree(TreeNode root) { if (root == null) { return null; } Queue<TreeNode> queue = new LinkedList<>(); queue.offer(root); while(!queue.isEmpty()) { TreeNode node = queue.poll(); // 交换 TreeNode temp = node.left;  node.left = node.right; node.right=temp; // 添加子元素 if (node.left!=null){ queue.offer(node.left); } if (node.right!=null){ queue.offer(node.right); } } return root; }


复杂度

    时间复杂度:O(N),其中N为二叉树节点数,循环会遍历每一个节点

    空间复制度:O(N),其中N为二叉树的节点数,主要是节点放到队列中,队列长度不会超节点数



题:https://leetcode-cn.com/problems/invert-binary-tree


    欢迎广大人民群众,快乐三连击:【点赞,在看,分享】 好东西又分享出来