第15 题:
题目:输入一颗二元查找树,将该树转换为它的镜像,
即在转换后的二元查找树中,左子树的结点都大于右子树的结点。
用递归和循环两种方法完成树的镜像转换。
例如输入:
8
/ \
6 10
/\ /\
5 7 9 11
输出:
8
/ \
10 6
/\ /\
11 9 7 5
定义二元查找树的结点为:
7
struct BSTreeNode // a node in the binary search tree (BST)
{
int m_nValue; // value of node
BSTreeNode *m_pLeft; // left child of node
BSTreeNode *m_pRight; // right child of node
};
循环方法我们可以使用栈 或者 队列,将节点出栈/队列,将其左右孩子入栈/队列,
下面代码中使用的是栈结构。
代码:
#include <vector>
#include <iostream>
using namespace std;
struct BSTreeNode
{
void reverseWithRecursion() //递归
{
BSTreeNode *temp = m_pLeft;
m_pLeft = m_pRight;
m_pRight = temp;
if (m_pLeft)
m_pLeft->reverseWithRecursion();
if (m_pRight)
m_pRight->reve