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

本文详细介绍了C++中二叉树的数据结构实现,并提供了包括添加节点、层次遍历、中序遍历、后序遍历、前序遍历在内的多种操作方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

// 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/

American Heritage 题目描述 Farmer John takes the heritage of his cows very seriously. He is not, however, a truly fine bookkeeper. He keeps his cow genealogies as binary trees and, instead of writing them in graphic form, he records them in the more linear tree in-order" and tree pre-order" notations. Your job is to create the `tree post-order" notation of a cow"s heritage after being given the in-order and pre-order notations. Each cow name is encoded as a unique letter. (You may already know that you can frequently reconstruct a tree from any two of the ordered traversals.) Obviously, the trees will have no more than 26 nodes. Here is a graphical representation of the tree used in the sample input and output: C / \ / \ B G / \ / A D H / \ E F The in-order traversal of this tree prints the left sub-tree, the root, and the right sub-tree. The pre-order traversal of this tree prints the root, the left sub-tree, and the right sub-tree. The post-order traversal of this tree print the left sub-tree, the right sub-tree, and the root. ---------------------------------------------------------------------------------------------------------------------------- 题目大意: 给出一棵二叉树的中序遍历 (inorder) 和前序遍历 (preorder),求它的后序遍历 (postorder)。 输入描述 Line 1: The in-order representation of a tree. Line 2: The pre-o rder representation of that same tree. Only uppercase letter A-Z will appear in the input. You will get at least 1 and at most 26 nodes in the tree. 输出描述 A single line with the post-order representation of the tree. 样例输入 Copy to Clipboard ABEDFCHG CBADEFGH 样例输出 Copy to Clipboard AEFDBHGC c语言,代码不要有注释
最新发布
06-16
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

不负初心

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

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

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

打赏作者

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

抵扣说明:

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

余额充值