题目
操作给定的二叉树,将其变换为源二叉树的镜像。
数据范畴:二叉树的节点数 0≤n≤1000 , 二叉树每个节点的值 0≤val≤1000
要求: 空间复杂度 O(n) 。本题也有原地操作,即空间复杂度 O(1) 的解法,工夫复杂度 O(n)
比方:
源二叉树
镜像二叉树
参数阐明:二叉树类,二叉树序列化是通过按层遍历,#代表这这个节点为空节点,举个例子:
1 / \2 3 / 4
以上二叉树会被序列化为 {1,2,3,#,#,4}
示例1
输出:{8,6,10,5,7,9,11}返回值:{8,10,6,11,9,7,5}
示例2
输出:{}返回值:{}
思路
- 递归的替换左右子树
- 应用栈辅助,dfs遍历二叉树,替换左右子节点。(解答略)
解答代码
/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * }; */class Solution {public: /** * @param pRoot TreeNode类 * @return TreeNode类 */ TreeNode* Mirror(TreeNode* pRoot) { // write code here if (pRoot == nullptr) { return nullptr; } auto newRoot = new TreeNode(pRoot->val); newRoot->left = Mirror(pRoot->right); newRoot->right = Mirror(pRoot->left); return newRoot; }};