【练习】输入一颗二元查找树,将该树转换为它的镜像
第15 题: 题目:输入一颗二元查找树,将该树转换为它的镜像, 即在转换后的二元查找树中,左子树的结点都大于右子树的结点。 用递归和循环两种方法完成树的镜像转换。 例如输入: 8 / \ 6 10 /\ /\ 5 7 9 11 输出: 8 / \ 10 6 /\ /\ 11 9 7 5 定义二元查找树的结点为: 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 <iostream> using namespace std; 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 }; void InsertNode(BSTreeNode* &pRoot,int value) { if (!pRoot) { pRoot=new BSTreeNode; pRoot->m_nValue=value; pRoot->m_pLeft=NULL; pRoot->m_pRight=NULL; } else { if (pRoot->m_nValue>value) { InsertNode(pRoot->m_pLeft,value); } else if (pRoot->m_nValue<value) { InsertNode(pRoot->m_pRight,value); } else { cout<<"repeated insertation"<<endl; } } } void InOrder(BSTreeNode*pRoot) { if (!pRoot) { return; } else { if (pRoot->m_pLeft) { InOrder(pRoot->m_pLeft); } cout<<pRoot->m_nValue<<"\t"; if (pRoot->m_pRight) { InOrder(pRoot->m_pRight); } } } void Transfer(BSTreeNode* pRoot) { BSTreeNode* pTemp=pRoot->m_pLeft; pRoot->m_pLeft=pRoot->m_pRight; pRoot->m_pRight=pTemp; if (pRoot->m_pLeft) { Transfer(pRoot->m_pLeft); } if (pRoot->m_pRight) { Transfer(pRoot->m_pRight); } } int main() { BSTreeNode *pRoot=NULL; InsertNode(pRoot,8); InsertNode(pRoot,6); InsertNode(pRoot,10); InsertNode(pRoot,5); InsertNode(pRoot,7); InsertNode(pRoot,9); InsertNode(pRoot,11); cout<<"before transferred"<<endl; InOrder(pRoot); Transfer(pRoot); cout<<"\n after transferred"<<endl; InOrder(pRoot); return 0; }