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

Posted 与你同在架构之路

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构与算法—翻转二叉树相关的知识,希望对你有一定的参考价值。

大家好,我是宇哥


题目: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


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

以上是关于数据结构与算法—翻转二叉树的主要内容,如果未能解决你的问题,请参考以下文章

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

翻转二叉树

算法 翻转二叉树 dfs

算法:二叉树翻转

代码随想录算法训练营第15天 | ● 层序遍历 10 ● 226.翻转二叉树 ● 101.对称二叉树 2

「经典题目回顾」翻转二叉树!