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