非递归先序遍历二叉树

struct elementEx
{
 int key;
 elementEx* left;
 elementEx* right;
 elementEx* parent;
 ~elementEx()
 {
  delete left;
  delete right;
 }
 elementEx(int key)
 {
  this->key = key;
  parent = NULL;
  left = NULL;
  right = NULL;
 }
};

 

 

 

 elementEx* T = root;
  while(T)
  {
   out << T->key << endl;
   if(T->left)
   {
    T = T->left;
    out << "to left" << endl;
    continue;
   }
   else if(T->right)
   {
    out << "to right" << endl;
    T = T->right;
    continue;
   }
   else
   {
    bool found = false;
    while(!found)
    {
     if (T->parent)
     {
      if(T->parent->left == T)//left child node
      {
       if(T->parent->right)
       {
        T = T->parent->right;
        out <<"go to parent' right" << endl;
        found = true;
        break;
       }
       else//right node empty
       {
        out <<"go to parent" << endl;
        T = T->parent;
        continue;
       }
      }

      if(T->parent->right == T)//right child node
      {
       out <<"go to parent" << endl;
       T = T->parent;
       continue;
      }

     }
     else//root node
      return ;
    }//while(found)
    if(T && found)
     continue;
   }

  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值