【题目描述】:操作给定的二叉树,将其变换为源二叉树的镜像。
【题目分析】:镜像的过程就是将二叉树的左右子数交换的过程,直到叶子节点。我们知道一个根节点的左孩子指针和右孩子指针,那么再改变根节点的指向即可解决问题。也就是,需要先知道左右孩子指针,再处理根节点。显然对应遍历方式中的后序遍历。
后序遍历的模板:
void postOrder(TreeNode *root) {
if (!root) return;
postOrder(root->left); // left child
postOrder(root->right); // right child
// process root
}
【代码及分析】:
class Solution {
public:
TreeNode* dfs(TreeNode *r) {
if (!r) return nullptr;
TreeNode *lval = dfs(r->left);// 左孩子
TreeNode *rval = dfs(r->right);//右孩子
r->left = rval, r->right = lval;
return r;
}
void Mirror(TreeNode *pRoot) {
if (!pRoot) return;
dfs(pRoot); //右根左的形式递归调用
}
};
【总结】该题主要考查的是二叉树的算法,本代码也是用递归算法来实现。我了解到后序遍历的模板使用。要多练习。