1. 程式人生 > >二叉樹經典題解

二叉樹經典題解

#include <iostream>
#include <cstdio>
#include <queue>
using namespace std;

struct BiTNode{
    char data;
    struct BiTNode* lchild, * rchild;
};
BiTNode* T;
void CreateTree(BiTNode* &T){
    char ch;
    ch = getchar();
    if(ch != '#'){
        T = new BiTNode;
        T->data = ch;
        CreateTree(T
->lchild); CreateTree(T->rchild); }else{ T = NULL; } } void preorder(BiTNode* T){ if(T){ cout << T->data; preorder(T->lchild); preorder(T->rchild); } } void inorder(BiTNode* T){ if(T){ inorder(T->lchild); cout << T
->data; inorder(T->rchild); } } void postorder(BiTNode* T){ if(T){ postorder(T->lchild); postorder(T->rchild); cout << T->data; } } void cengci(BiTNode* T){ queue<BiTNode*> q; if(T){ q.push(T); while(!q.empty()){ T
= q.front(); q.pop(); cout << T->data; if(T->lchild){ q.push(T->lchild); } if(T->rchild){ q.push(T->rchild); } } } } int main(){ CreateTree(T); cout << "先序遍歷:"; preorder(T); cout << endl << "中序遍歷:"; inorder(T); cout << endl << "後序遍歷:"; postorder(T); cout << endl << "層次遍歷:"; cengci(T); return 0; }

下面是另一種寫法;

#include<stdio.h>
#include<stdlib.h>
#include<cstring>
#include<queue>
#include<iostream>
using namespace std;

typedef struct Node{
    struct Node* lchild;//左孩子 
    struct Node* rchild;//右孩子 
    char c;
}Node,*BiTree; 

BiTree creatTree(){//建樹 
    char str;
    BiTree T;
    scanf("%c",&str);
    if(str=='#') 
        {
            T=NULL;
        }

    else{
        T = new Node;
        T->c = str;
        T->lchild = creatTree();
        T->rchild = creatTree();
        }
    return T; 
}
//先序遍歷
void preOrder(BiTree T){
    if(T){
        printf("%c",T->c);
        preOrder(T->lchild);
        preOrder(T->rchild);
    }
} 
//中序遍歷
void inOrder(BiTree T){
    if(T){
        inOrder(T->lchild);
        printf("%c",T->c);
        inOrder(T->rchild);
    }
} 
//後序
void postOrder(BiTree T){
    if(T){
        postOrder(T->lchild);
        postOrder(T->rchild);
        printf("%c",T->c);
    }
} 
 //層次
 void cengorder(BiTree T){
    BiTree P;
     queue <BiTree> Q;
    if(T){
        Q.push(T);
    }
    while(!Q.empty() ){
        P=Q.front() ;
        Q.pop() ;
        printf("%c",P->c );
        if(P->lchild !=NULL){
            Q.push(P->lchild ); 
        }   
        if(P->rchild !=NULL){
            Q.push(P->rchild );     
        }
    } 
  } 
int main(){
    BiTree T;
    T = creatTree();
    preOrder(T);
    inOrder(T);
    postOrder(T);
    cengorder(T);
    return 0;
}