剑指offer2之二叉树的镜像

前言

画图是在面试过程中应聘者用来帮助自己分析、推理的常用手段。画出一些与题目相关的图形,借以辅助自己观察和思考。比如涉及二叉树、链表、二维数组等问题都可以采用画图的方法来分析。

题目(二叉树的镜像)

请完成一个函数,输入一棵二叉树,该函数输出它的镜像。
(镜像就是每棵子树的左右节点交换)

算法思路

由于我们需要对二叉树的每颗子树进行左右子节点的交换过程,因此,我们利用层序遍历二叉树,然后每棵子树进行操作。

而层序遍历二叉树可以使用递归和非递归(循环)的方式。

对于递归方式,当当前根节点或同时不存在左右子树时递归退出,否则就交换两个子树,若一边子树不存在,也必须交换,接下根节点如果还有右节点或左节点,那么就继续递归下去求解。

对于非递归方式,主要利用队列(本题栈也形,因为它只要对每个节点下的子树进行交换,而与节点顺序无关)来实现,从上到下,从左到右依次将需要进行交换的节点入栈(根节点先入栈),对于出栈的是叶节点就跳过循环。

算法实现

递归版本

非递归(循环)版本

复杂度分析

算法主要利用层序遍历,每个结点只需遍历一次,故时间复杂度为 O(n)。而无论是使用了递归还是栈,最差情况下空间复杂度为 O(n)。

参考

<<剑指offer2>>

-------------本文结束感谢您的阅读-------------