(1)建立包含10个结点的二叉树(树结构和数据元素的值由自己设定); (2)完成

论坛 期权论坛 期权     
匿名   2018-4-26 14:00   4282   3
分享到 :
0 人收藏

3 个回复

正序浏览
4#
热心网友  15级至尊 | 2018-4-30 01:55:38 发帖IP地址来自
一年好运随春到 四季彩云滚滚来 横批:万事如意
3#
热心网友  15级至尊 | 2018-4-30 01:55:37 发帖IP地址来自
便写的,别见怪……

#include iostream
2#
弓雅云  2级吧友 | 2018-4-30 01:55:36 发帖IP地址来自

随便写的,别见怪……

#include
#include

using namespace std;

#define MAX_TREE_NODE 10

struct Node
{
int elem;
struct Node *pLeft , *pRight;
bool bVisit;

Node() : elem(0) , pLeft(NULL) , pRight(NULL) , bVisit(false)
{
}
};

void BuildTree(struct Node **pTree)
{
if (pTree == NULL)
{
  return ;
}

for ( int i = 0; i < MAX_TREE_NODE; ++i )
{
  struct Node *pElem = new Node;
  if (pElem == NULL)
  {
   continue;
  }

  coutpElem->elem;

  if (*pTree == NULL)
  {
   *pTree = pElem;
  }
  else
  {
   Node *pCompare = *pTree;
   while( pCompare != NULL)
   {
    if ( pElem->elem > pCompare->elem )
    {
     if (pCompare->pRight != NULL)
     {
      pCompare = pCompare->pRight;
     }
     else
     {
      pCompare->pRight = pElem;
      break;
     }
    }
    else
    {
     if (pCompare->pLeft != NULL)
     {
      pCompare = pCompare->pLeft;
     }
     else
     {
      pCompare->pLeft = pElem;
      break;
     }
    }
   }
  }
}
}

//把整个树标记成未访问状态  防止访问完再次访问时出现无法访问
void MakeTreeUnVisit(struct Node *pTree)
{
stack s;

s.push( pTree );

while ( !s.empty() )
{
  struct Node *pVisit = s.top();

  s.pop();

  if ( pVisit )
  {
   pVisit->bVisit = false;

   s.push( pVisit->pRight );

   s.push( pVisit->pLeft );

  }
}
}

//前序 根-左-右
void PrintTree_1(struct Node *pTree)
{
stack s;

s.push( pTree );

while ( !s.empty() )
{
  struct Node *pVisit = s.top();

  s.pop();

  if ( pVisit )
  {
   coutpLeft ); //左

    pVisit->bVisit = true;
   }
  }
}

coutpRight );

    s.push( pVisit );

    s.push( pVisit->pLeft );

    pVisit->bVisit = true;
   }
   else
   {
    cout
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:58388
帖子:6688
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP