1.具体算法
class Solution {
public:
void Mirror(TreeNode *pRoot) {
if(!pRoot)
{
return;
}
if(pRoot->left||pRoot->right)
{
Mirror(pRoot->left);
Mirror(pRoot->right);
TreeNode *TermNode;
TermNode = pRoot->left;
pRoot->left = pRoot->right;
pRoot->right = TermNode;
}
else{
return;
}
}
};
2.算法总结
- 这个算法的难度在于递归,因为要得到源二叉树的镜像,那么只能从叶节点向根节点方向的左右节点的交换顺序,
如上图所示,所有节点的左右节点都发生了交换,如果交换是从根节点到叶节点,那么就得不到镜像二叉树了,因为所有双亲节点和子节点的关系全打乱了,只有从叶节点到根节点方向逐层交换,才能保证每个除叶节点以外其它节点的左右节点只发生左右交换的变化,其他不变。 - 树的递归问题,一定要找到递归之间的关系,还要注意递归什么时候会结束,要及时判断,并回溯回去。