剑指offer2对称的二叉树

题目(对称的二叉树)

请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。(单节点的树也属于对称的二叉树特例,其余的二叉树只要沿着根节点所在中心对折,重合节点的值也是相等的)

算法思路

采用递归遍历树的思想。

首先考虑单节点的情况,它也属于对称二叉树的一种;
然后对于含有左右子树的节点 A 来说,假设,下述节点均存在,则 A 的左节点的左节点等于其右节点的右节点,而 A 的左节点的右节点等于其右节点的左节点,那么就符合对称的规则。之后要判断整颗二叉树是否对称,只需继续递归求解相同问题即可。

递归跳出的条件为:只要一边节点不存在,则该树就不是对称的,否则,如果两边节点都不存在,说明已经遍历完整棵树,此时该树一定是对称的二叉树。

算法实现

复杂度分析

算法主要使用递归遍历二叉树,每个结点只需遍历一次,故时间复杂度为 O(n)。而由于使用了递归,那么最差情况下递归工作栈需要消耗的空间复杂度为 O(n)。

参考

<<剑指offer2>>

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