题目:输入一颗二叉搜索树,将该树转换为它的镜像,即在转换后的二叉搜索树中,左子树的结点都大于右子树的结点。用递归和循环两种方法完成树的镜像转换。
例如输入:
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;
}