求二元查找树的镜像

来源:互联网 发布:shtml nginx 编辑:程序博客网 时间:2024/06/02 21:19
题目:输入一颗二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树的结点。
//递归求二元查找树的镜像(即左右子树指针互换)void MirrorRecursively(BTree pNode){if (NULL == pNode)return;//左右子树互换BTree temp = pNode->lchild;pNode->lchild = pNode->rchild;pNode->rchild = temp;MirrorRecursively(pNode->lchild);MirrorRecursively(pNode->rchild);}

//非递归求二元查找树的镜像方法1void NonRecurMirror_1(BTree pNode){stack<BTree> stck;set<BTree> s;while (pNode!=NULL || !stck.empty()){while (pNode != NULL){BTree temp = pNode->lchild;pNode->lchild = pNode->rchild;        pNode->rchild = temp;stck.push(pNode);pNode = pNode->lchild;}if (!stck.empty()){pNode = stck.top();stck.pop();pNode = pNode->rchild;}}}//非递归求二元查找树的镜像方法2void NonRecurMirror_2(BTree pNode){if (NULL == pNode){cout << "空树" <<endl;return;}    stack<BTree> stck;stck.push(pNode);while (!stck.empty()){pNode = stck.top();stck.pop();//出栈BTree temp = pNode->lchild;pNode->lchild = pNode->rchild;        pNode->rchild = temp;if (pNode->rchild)stck.push(pNode->rchild);if (pNode->lchild)stck.push(pNode->lchild);}}

0 0
原创粉丝点击