首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

标题:输入一颗二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树的结点。用递归和循环两种方法完成树的镜像转换

2012-10-24 
题目:输入一颗二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树的结

题目:输入一颗二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树的结点。用递归和循环两种方法完成树的镜像转换。
题目:输入一颗二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树的结点。用递归和循环两种方法完成树的镜像转换。
例如输入:

     8
    /  \
  6      10
/\       /\
5  7    9   11

输出:

      8
    /  \
  10    6
/\      /\
11  9  7  5

思路:
左右子树交换

如果用循环来做:就是用辅助栈来模拟递归

// Mirror a BST (swap the left right child of each node) recursively// the head of BST in initial call///////////////////////////////////////////////////////////////////////void MirrorRecursively(BSTreeNode *pNode){      if(!pNode)            return;      // swap the right and left child sub-tree      BSTreeNode *pTemp = pNode->m_pLeft;      pNode->m_pLeft = pNode->m_pRight;      pNode->m_pRight = pTemp;      // mirror left child sub-tree if not null      if(pNode->m_pLeft)            MirrorRecursively(pNode->m_pLeft);        // mirror right child sub-tree if not null      if(pNode->m_pRight)            MirrorRecursively(pNode->m_pRight); }程序基本上一样///////////////////////////////////////////////////////////////////////// Mirror a BST (swap the left right child of each node) Iteratively// Input: pTreeHead: the head of BST///////////////////////////////////////////////////////////////////////void MirrorIteratively(BSTreeNode *pTreeHead){      if(!pTreeHead)            return;      std::stack<BSTreeNode *> stackTreeNode;      stackTreeNode.push(pTreeHead);      while(stackTreeNode.size())      {            BSTreeNode *pNode = stackTreeNode.top();            stackTreeNode.pop();            // swap the right and left child sub-tree            BSTreeNode *pTemp = pNode->m_pLeft;            pNode->m_pLeft = pNode->m_pRight;            pNode->m_pRight = pTemp;            // push left child sub-tree into stack if not null            if(pNode->m_pLeft)                  stackTreeNode.push(pNode->m_pLeft);            // push right child sub-tree into stack if not null            if(pNode->m_pRight)                  stackTreeNode.push(pNode->m_pRight);      }}

热点排行