LeetCode刷题-101. 对称二叉树
题目链接:101. 对称二叉树
¶题解:
简单递归!
¶题目简述:
给定一棵二叉树判断是否是对称的!
¶题解一:递归
对于根节点来说,对称意味着左子树和右子树一致。
对于左子树和右子树,即保证左子树的左子树和右子树的右子树一致并且左子树的右子树和右子树的左子树一致即可!
则我们可以递归分解为子问题来解决!
递归DFS:
-
dfs(p->left, q->right) && dfs(p->right, q->left);
-
最终答案:
dfs(root->left, root->right)
-
递归出口:和前几道题一样:
!p && !q
:都空返回true
!p || !q || p->val != q->val
:一个空一个非空,或者都不空但值不相同返回false
注意:
- 根节点为空,直接返回
true
时间复杂度:每个节点只被遍历一次,为O(n)
¶AC代码一:
1 |
|
¶题解二:非递归
非递归写法:即用两个栈来模拟正常的中序遍历和反着的中序遍历(右根左)!
注意点:
while
条件为lc || rc || left.size()
- 内部
while
条件为lc && rc
,左的往左走,右的往右走 - 退出
while
的判断为lc || rc
,退出循环的情况一定是都空(不需要处理)或者是一个空一个不空(需要处理,无法对称) - 值不相同,无法对称
- 左的往右走,右的往左走
时间复杂度:每个节点只被遍历一次,为O(n)
¶AC代码二:
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 小牛博客!
评论