程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 二叉樹的遍歷

二叉樹的遍歷

編輯:關於C語言

下面的程序分別實現了二叉樹的前序中序後序和層次遍歷!

#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
struct LNode{
    char data;
    LNode *lchild;
    LNode *rchild;
};
#define N 1000
void inorder(LNode *root){
    if(root){
        inorder(root->lchild);
        cout<<root->data<<" ";
        inorder(root->rchild);
    }
}
void preorder(LNode *root){
    if(root){
        cout<<root->data<<" ";
        preorder(root->lchild);
        preorder(root->rchild);
    }
}
void postorder(LNode *root){
    if(root){
        postorder(root->lchild);
        postorder(root->rchild);
        cout<<root->data<<" ";
    }
}
void leverorder(LNode *root){
    queue<LNode *> my_queue;
    my_queue.push(root);
    while(!my_queue.empty()){
        LNode *p=my_queue.front();
        my_queue.pop();
        cout<<p->data<<" ";
        if(p->lchild!=NULL)
            my_queue.push(p->lchild);
        if(p->rchild!=NULL)
            my_queue.push(p->rchild);
    }
}
int main(){
    char ldate[N];
    cin>>ldate;
    char flag[N];
    int i;
    flag[0]='0';
    char ch='A';
    for(i=1;i<strlen(ldate);i+=2){
        flag[i]=flag[i+1]=ch;
        ++ch;
    }
    flag[i-1]='\0';
    i=0;
    LNode *tree[N];
    while(i<strlen(flag)){
        tree[i]=new LNode();
        tree[i]->data=ldate[i];
        tree[i]->lchild=NULL;
        tree[i]->rchild=NULL;
        i++;
    }
      
    LNode *root=new LNode;
    for(i=0;i<strlen(flag);++i){
        if(flag[i]=='0'){
            root=tree[i];
            continue;
        }
          
        int j;
        for(j=0;j<strlen(ldate);++j){
            if(tree[j]->data==flag[i]){
                if(tree[j]->lchild==NULL)
                    tree[j]->lchild=tree[i];
                else
                    if(tree[j]->rchild==NULL)
                        tree[j]->rchild=tree[i];
            }
        }
    }
    LNode *p=root;
    inorder(p);
    cout<<endl;
    p=root;
    preorder(p);
    cout<<endl;
    p=root;
    postorder(p);
    cout<<endl;
    p=root;
    leverorder(p);
    cout<<endl;
    return 0;
}


本文出自 “菜鳥的進階之路” 博客,請務必保留此出處http://beyond316.blog.51cto.com/7367775/1266347

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved