JZ27 二叉树的镜像
描述
操作给定的二叉树,将其变换为源二叉树的镜像。
数据范围:二叉树的节点数 $0≤n≤1000$ , 二叉树每个节点的值 $0≤val≤1000$
要求: 空间复杂度 $O(n)$ 。本题也有原地操作,即空间复杂度 $O(1)$ 的解法,时间复杂度 $O(n)$
比如:
源二叉树

镜像二叉树

示例1
1 2 3
| 输入:{8,6,10,5,7,9,11} 返回值:{8,10,6,11,9,7,5} 说明:如题面所示
|
示例2
题解
初见思路:感觉这道题如果使用递归来做的话,就是直接递归把每一个节点的左右子树都反转就可以了,如果原地来做的话是使用栈来做吗?层序遍历每一层,然后把它们对调,试一试吧。(一遍过)
找大G老师分析了一下,使用栈方法也是$O(n)$的空间复杂度,原地的方法竟然是递归!!!
看了下官方题解也说是递归,但是递归栈也是要空间的阿,感觉牛客这个题有点整蛊了。
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
|
#include <stack> class Solution { public:
TreeNode* Mirror(TreeNode* pRoot) { if(!pRoot) return nullptr;
stack<TreeNode*> st; st.push(pRoot); while (!st.empty()) { TreeNode* curr = st.top(); st.pop(); TreeNode* temp = curr->left; curr->left = curr->right; curr->right = temp; if(curr->left) st.push(curr->left); if(curr->right) st.push(curr->right); }
return pRoot; } };
|