给定一棵二叉树,返回该二叉树的镜像,即对于每一棵子树,都把其左右子树交换。
struct TreeNode{
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int v):val(v),left(NULL),right(NULL){}
};
typedef TreeNode Node;
Node* build(Node* root){
if(root==NULL)
return NULL;
Node* node = new Node(root->val);
node->left = build(root->right);
node->right = build(root->left);
return node;
}
Node* stack1[1000];
Node* stack2[1000];
int top=-1;
Node* build_it(Node* root){
if(root==NULL)
return NULL;
Node* root2 = new Node(root->val);
stack1[++top] = root;
stack2[top] = root2;
while(top>=0){
Node* node1 = stack1[top];
Node* node2 = stack2[top--];
if(node1->left!=NULL){
node2->right = new Node(node1->left->val);
stack1[++top] = node1->left;
stack2[top] = node2->right;
}
if(node1->right!=NULL){
node2->left = new Node(node1->right->val);
stack1[++top] = node1->right;
stack2[top] = node2->left;
}
}
return root2;
}
build函数是用递归实现的,比较直观,而build_it是用非递归实现的