您的位置:首页 > 职场人生

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

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

例如输入:

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: