遍历树的方法有两种:自顶向下和自底向上
1.自顶向下:本质上是一个前序遍历,使用辅助栈,依次将某个节点的左右节点放入栈中,然后取出节点,交换其左右节点的位置
TreeNode* mirrorTree(TreeNode* root) {
if(!root)
return NULL;
stack<TreeNode*> mysk;
mysk.push(root);
while(!mysk.empty()){
TreeNode* p = mysk.top();
mysk.pop();
if(p->left) mysk.push(p->left);
if(p->right) mysk.push(p->right);
TreeNode*temp = p->left;
p->left = p->right;
p->right = temp;
}
return root;
2.自底向上:递归,本质上是一个后序遍历,每次返回的时候,交换上一次返回的左右的子节点
TreeNode* mirrorTree(TreeNode* root) {
if(!root)
return NULL;
TreeNode* left_leaf = mirrorTree(root->left);
TreeNode* right_leaf = mirrorTree(root->right);
root->left = right_leaf;
root->right = left_leaf;
return root;
}