面试题01 二叉树的镜像 【树】[ water ]

题目:输入一颗二叉搜索树,将该树转换为它的镜像,即在转换后的二叉搜索树中,左子树的结点都大于右子树的结点。用递归和循环两种方法完成树的镜像转换。 

例如输入:

     8
    /  \
  6      10
 /\       /\
5  7    9   11

输出:

      8
    /  \
  10    6
 /\      /\
11  9  7  5

1 该问题实质上是将二叉树的左右两子树,进行交换。
求二叉树的镜像
实现方法:
方法(1)
 : 前序遍历,交换左右子树,递归遍历    [ 这里采用 ]
方法(2)  : 使用非递归的方法,遍历左右子树

#include <iostream>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <cmath>
#include <vector>
#include <stack>
#include <deque>
#include <queue>
#include <bitset>
#include <list>
#include <map>
#include <set>
#include <iterator>
#include <algorithm>
#include <functional>
#include <utility>
#include <sstream>
#include <climits>
#include <cassert>
#define BUG puts("here!!!");

using namespace std;
struct Node {
	int value;
	Node* lchild;
	Node* rchild;
};
void mirror(Node* pn) {
	if(pn == NULL) return;
	else {
		Node* tmp = pn->lchild;
		pn->lchild = pn->rchild;
		pn->rchild = tmp;
		if(pn->lchild) {
			mirror(pn->lchild);
		}
		if(pn->rchild) {
			mirror(pn->rchild);
		}
	}
}
int main() {
	return 0;
}

原文地址:https://www.cnblogs.com/robbychan/p/3787175.html