题目:输入一颗二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树的结点。用递归和循环两种方法完成树的镜像转换。
例如输入:
8
8
/ \
6 10
/\ /\
5 7 9 11
输出:
8
/ \
10 6
/\ /\
11 9 7 5
这题相对很简单,没什么说的,直接代码了。。。
void BSTree::mirrorRec(BSTreeNode* node) { if (!node) return; mirrorRec(node->lc); mirrorRec(node->rc); BSTreeNode* temp = node->lc; //交换左、右子树 node->lc = node->rc; node->rc = temp; } void BSTree::mirrorRec() // 递归 { mirrorRec(root); } void BSTree::mirror() // 非递归 { stack<BSTreeNode*> st; st.push(root); //将二叉树的根结点压栈 while (!st.empty()) { BSTreeNode *t = st.top(); BSTreeNode *temp; st.pop(); temp = t->lc; //交换左、右子树 t->lc = t->rc; t->rc = temp; if (t->lc) st.push(t->lc); if (t->rc) st.push(t->rc); } }