二叉樹的遍曆

來源:互聯網
上載者:User

標籤:style   class   blog   code   http   color   

中序遍曆思想

若二叉樹為空白,則結束遍曆操作;否則中序遍曆根節點的左子樹;訪問根節點;中序遍曆右子樹;

實現代碼:

//中序遍曆代碼template<typename T>void BinaryTree<T>::InTraBiTree(BTNode<T> *p){    if(p)    {        InTraBiTree(p->lchild);        cout<<p->data<<" ";        InTraBiTree(p->rchild);    }}

下面是虛擬碼類比電腦步驟協助理解。

假設有這樣一個簡單二叉樹

虛擬碼類比電腦步驟如下:

 InTraBiTree(a){    if(a)    {        InTraBiTree(b)//a左為b,不為空白        {            if(b)            {                InTraBiTree(b左子)//b左子為空白,直接執行下一步                {                    if(NULL){};                }                cout<<b;                                InTraBiTree(c)//b右子為c                {                    if(c)                    {                        InTraBiTree(c左子)//c左子為空白,直接執行下一步                        cout<<c;                        InTraBiTree(c右子)//c右子為空白,直接執行下一步                    }                }//end c   c層執行結束,跳到b層            }        }//end b     b層結束跳到a層        cout<<a;        InTraBiTree(d)//a右為d        {            if(d)            {                InTraBiTree(d左子)//d左子為空白,直接執行下一步                cout<<d                InTraBiTree(d右子)//d右子為空白,直接執行下一步            }        }    }}

下面是完全實現代碼(C++版),可以測試下

template<typename T>struct BTNode{    T data;    BTNode<T> *lchild;    BTNode<T> *rchild;};template<typename T>class BinaryTree{private:    BTNode<T> *BT;public:    BinaryTree(){BT=NULL;}//建構函式,構造根節點並將根節點置空        void CreateBiTree(T end);//建立結束標誌位end的二叉樹        BTNode<T> * GetRoot();//返回根地址        void InTraBiTree(BTNode<T> *p);//中序遍曆二叉樹};void BinaryTree<T>::CreateBiTree(T end){    cout<<"輸入二叉樹,以"<<end<<"為空白指標域的標誌:"<<endl;    BTNode<T> *p;    T x;    cin>>x;    if(x==end)        return;    p=new BTNode<T>;    p->data=x;    p->lchild=NULL;    p->rchild=NULL;    BT=p;    create(p,1,end);    create(p,2,end);}template<typename T>static int create(BTNode<T> *p,int k,int end){    BTNode<T> *q;    T x;    cin>>x;    if(x!=end)    {        q=new BTNode<T>;        q->data=x;        q->lchild=NULL;        q->rchild=NULL;        if(k==1) p->lchild=q;        if(k==2) p->rchild=q;        create(q,1,end);        create(q,2,end);    }    return 0;}template<typename T>BTNode<T> * BinaryTree<T>::GetRoot(){    return BT;}template<typename T>void BinaryTree<T>::InTraBiTree(BTNode<T> *p){    if(p)    {        InTraBiTree(p->lchild);        cout<<p->data<<" ";        InTraBiTree(p->rchild);    }}#include<iostream>using namespace std;#include"BinaryTree.h";int main(void){        BinaryTree<char> b;//構造二叉樹對象,僅有一個b 指標指向NULL    char end=‘#‘;    b.CreateBiTree(end);//建立二叉樹,以#為結束標誌    getchar();    cout<<"中序遍曆二叉樹:";    b.InTraBiTree(b.GetRoot());    cout<<endl;            getchar();}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.