1. 程式人生 > >【資料結構】3-1 二叉樹的先序建立及遍歷操作

【資料結構】3-1 二叉樹的先序建立及遍歷操作

二叉樹真的令人頭大

#include<iostream>
using namespace std;
template <class T>
struct BTNode//二叉連結串列結點結構
{
    T data; //二叉樹中的元素
    BTNode<T> *lchild, *rchild;
};
template <class T>
class BTree   //二叉樹的二叉連結串列類
{
private:
    BTNode<T> *root; //二叉樹的根指標
    BTNode<T>* pre_create();//
先序建立二叉連結串列結構二叉樹r void preOrder(BTNode<T>*r);//先序遍歷二叉樹r void inOrder(BTNode<T>*r);//中序遍歷二叉樹r void postOrder(BTNode<T>*r);//後序遍歷二叉樹r void numOfNode(BTNode<T>*r, int &cont);//統計二叉樹r中的結點個數 public: BTree() { root = NULL; } void preCreat(); void preOrder() { cout << "
先序遍歷:"; preOrder(root); cout << endl; }//先序遍歷二叉樹 void inOrder() { cout << "中序遍歷:"; inOrder(root); cout << endl;}//中序遍歷二叉樹 void postOrder() { cout << "後序遍歷:"; postOrder(root); cout << endl;}//後序遍歷二叉樹 int numOfNode();//統計二叉樹中的結點個數 }; template<class T> BTNode<T>* BTree<T>::pre_create() {
char ch; cin >> ch; BTNode<T> *p; if (ch =='#') { p = NULL; } else { p = new BTNode<T>(); p->data = ch; p->lchild = pre_create(); p->rchild = pre_create(); } return p; } template<class T> void BTree<T>::inOrder(BTNode<T>*r) { if (r!=NULL) { inOrder(r->lchild); cout << r->data << " "; inOrder(r->rchild); } } template<class T> void BTree<T>::postOrder(BTNode<T>*r) { if (r!=NULL) { postOrder(r->lchild); postOrder(r->rchild); cout << r->data << " "; } } template<class T> void BTree<T>::preOrder(BTNode<T>*r) { if (r!=NULL) { cout << r->data << " "; preOrder(r->lchild); preOrder(r->rchild); } } template<class T> void BTree<T>::numOfNode(BTNode<T>*r,int &cont) { if (r) { cont++; numOfNode(r->lchild,cont); numOfNode(r->rchild,cont); } } template<class T> void BTree<T>::preCreat() { cout << "請按照先序的方式輸入要建立的二叉樹,空用#表示" << endl; root = pre_create(); cout << "二叉樹建立成功!" << endl; } template<class T> int BTree<T>::numOfNode() { int cont = 0; numOfNode(root, cont); return cont; } int main() { BTree<char> test; test.preCreat(); test.preOrder(); test.inOrder(); test.postOrder(); cout << "二叉樹中的節點個數為:" << test.numOfNode() << endl; system("pause"); return 0; }

輸入格式為先序遍歷的結果,空用#表示

會自動輸出建立好的二叉樹的先序,中序,後序遍歷的結果