栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

二叉树先序、中序、后序遍历

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

二叉树先序、中序、后序遍历

#include
#include
#include
#include
#include 
#include
using namespace std;
typedef struct BitNode{
    char data;
    struct BitNode *lchild, *rchild;
}BitNode,*BiTree;
void InOrderTraverse(BiTree T){
    //中序遍历
    if(!T)
        return;
    InOrderTraverse(T->lchild);
    cout << T->data;
    InOrderTraverse(T->rchild);
    return;
}   
vector In(BiTree T){
    vector v;
    if (!T)
        return v;
    stack s;
    while (T||!s.empty()){
        while (T){
            s.push(T);
            T = T->lchild;
        }
        T = s.top();
        s.pop();
        //cout << 123 << endl;
        v.push_back(T->data);
        T = T->rchild;
    }
    return v;
}
vector first(BiTree T){
    vector v;
    if(!T)
        return v;
    stack s;
    while(T||!s.empty()){
        while(T){
            v.push_back(T->data);
            s.push(T);
            T = T->lchild;
        }
        T = s.top();
        s.pop();
        T = T->rchild;
    }
    return v;
}
vector after(BiTree T){
    vector v;
    if(!T)
        return v;
    stack s;
    while(T||!s.empty()){
        while(T){
            s.push(T);
            v.push_back(T->data);
            T = T->rchild;
        }
        T = s.top();
        s.pop();
        T = T->lchild;
    }
    reverse(v.begin(), v.end());
    return v;
}
void CreatBitTree(BiTree &T){
    cout << "请输入数据从根节点开始输入空节点输入#,数据和数据之间用空格隔开按照先序遍历输入,构成满二叉树才行!例如1 2 # # 3 # #" << endl;
    char ch;
    cin >> ch;
    if(ch=='#')
        T = NULL;
    else {
        T = new BitNode;
        T->data = ch;
        CreatBitTree(T->lchild);
        CreatBitTree(T->rchild);
    }
    return;
}
int Depth(BiTree T){
    if(T==NULL)
        return 0;
    else {
        int m = Depth(T->lchild);
        int n = Depth(T->rchild);
        if(m>n)
            return m + 1;
        return n + 1;
    }
}
void Copy(BiTree T,BiTree &NewT){
    if(T==NULL){
        NewT = NULL;
        return;
    }
    else {
        NewT = new BitNode;
        NewT->data = T->data;
        Copy(T->lchild, NewT->lchild);
        Copy(T->rchild, NewT->rchild);
    }
    return;
}
int main()
{
    vector v;
    BitNode *t;
    CreatBitTree(t);
    v=In(t);
    int n = v.size();
    cout << "中序遍历序列为:";
    for (int i = 0; i < n;i++)
        cout << v[i] << " n"[i == n - 1];
    v.clear();
    v=first(t);
    n = v.size();
    cout << "先序遍历序列为";
    for (int i = 0; i < n;i++)
        cout << v[i] << " n"[i == n - 1];
    v.clear();
    v = after(t);
    n = v.size();
    cout << "后序遍历序列为";
    for (int i = 0; i < n;i++)
        cout << v[i] << " n"[i == n - 1];
        return 0;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/965581.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号