Pre-order,in-order, post-order of Tree Traversal

// Node class
class Node {
    string key;
    Node* left;
    Node* right;
public:
    Node() { key=-1; left=NULL; right=NULL; };
    void setKey(string aKey) { key = aKey; };
    void setLeft(Node* aLeft) { left = aLeft; };
    void setRight(Node* aRight) { right = aRight; };
    string Key() { return key; };
    Node* Left() { return left; };
    Node* Right() { return right; };
};

// Tree class
class Tree {
     Node* root;
public:
     Tree();
     ~Tree();
     Node* Root() { return root; };
     void addNode(string key);
     void levelOrder(Node* n);
     void Inorder(Node* );
    void Postorder(Node* );
    void Preorder(Node* node);
private:
     void addNode(string key, Node* leaf);
     void freeNode(Node* leaf);
};


void Tree::Tree()
{
     root = null;
}

void Tree::~Tree()
{
    freeNode(root);
}


// Add a node (private)</cite>
void Tree::addNode(string key, Node* leaf) {
    if( key <= leaf->Key() ) {
       if( leaf->Left() != NULL )
      addNode(key, leaf->Left());
       else {
      Node* n =new Node();
      n->setKey(key);
      leaf->setLeft(n);
       }
    }
    else{
       if( leaf->Right() != NULL )
      addNode(key, leaf->Right());
       else</var> {
      Node* n = new</var> Node();
      n->setKey(key);
      leaf->setRight(n);
       }
    }
}

 

void Tree::freeNode(Node* leaf)
{
      if(leaf != NULL)
       {
           freeNode(leaf->left());
           freeNode(leaf->right());
           delete leaf;    
       }
}

void Tree::addNode(string key)
{
   if(root == NULL){
    cout << "add root node"<<key<<endl;
    Node * n = new Node();
    n->setKey(key);
    root = n;
  }else{
   count<< "add other node"<<key <<endl;
    addNode(key, root);
  }
}


void Tree::preorder(Tree* root)
{
    if(root){
      cout<<"node->key()"<<endl;
      preorder(root->left);
       preorder(root->right);
     }
}

void Tree::postorder(Tree * root)
{
  if(root){
      postorder(root->left());
      postorder(root->right());
     cout<<root->key()<<endl;
  }
}


void Tree::leverTravesal(Tree *root)
{
    if(root){
     Queue <Node*> v;  
     v.push(root);
     while(! q.empty()){
       n = v.front()
       cout<< n->Key() <<endl;
       if(n->left() != null)
          v.push(n->left());
       if(n->rithg != null)
          v.push(n->right());
      v.pop();     
  }
  } 
}


http://www-h.eng.cam.ac.uk/help/tpl/talks/C++graphs.html

http://www.cplusplus.com/forum/beginner/131457/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不负初心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值