二叉树的镜像C++
二叉树的镜像
http://www.nowcoder.com/questionTerminal/564f4c26aa584921bc75623e48ca3011
本题思路较为简单,直接思考递归即可完成
算法思路:
- 新建节点left为当前节点的左子树,right为当前节点的右子树;
left=pRoot->left;
right=pRoot->right; - 交换当前节点的左右子树(改变指向即可)
pRoot->left=right;
pRoot->right=left; - 递归镜像left节点和right节点
- 如果当前节点为空,不需要交换直接返回;
或者当前节点的左子树和右子树均为空,直接返回。
代码实现:
/* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } };*/ class Solution { public: void Mirror(TreeNode *pRoot) { if(pRoot == NULL){ return; } if((pRoot->left==NULL) && (pRoot->right==NULL)){ return; } TreeNode* left=pRoot->left; TreeNode* right=pRoot->right; pRoot->left=right; pRoot->right=left; Mirror(left); Mirror(right); } };