JZ27-题解 | #二叉树的镜像#
二叉树的镜像
http://www.nowcoder.com/practice/a9d0ecbacef9410ca97463e4a5c83be7
题目描述
操作给定的二叉树,将其变换为源二叉树的镜像。
题解
这种是自身进行比较的,没有结点之间的比较,通常采用一个递归函数.
本题目直径进行左右子树结点交换操作,然后一次对左右子树进行递归.
代码
/*
描述
操作给定的二叉树,将其变换为源二叉树的镜像。
输入:
{8,6,10,5,7,9,11}
返回值:
{8,10,6,11,9,7,5}
*/
#include<iostream>
using namespace std;
struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
TreeNode* Mirror(TreeNode* pRoot) {
if (!pRoot) return pRoot; //递归出口
//交换节点,注意,交换节点的同时,将左子树和右子树分别一起进行交换了
TreeNode* temp = pRoot->left;
pRoot->left = pRoot->right;
pRoot->right = temp;
//这里不必进行判断,当进行递归操作时候,已经有了判断空的出口条件
//注意:这里不需要进行判断的原因是:不需要访问节点中的值,如果需要
//访问节点中的值,就必须要判断节点是否为空
Mirror(pRoot->left);
Mirror(pRoot->right);
return pRoot;
}
int main() {
system("pause");
return 0;
}