zoukankan      html  css  js  c++  java
  • 遍历线索二叉树

    可能编译时会有些语法小错误(比如分号,->,等),很容易就自己纠正了哦,思路绝对是完全正确的,所以用的话就自己试着改改吧,直接复制粘贴,就正确,岂不是太没写代码体验了,自己改改才印象更加深刻的呢()~~~~;

    //遍历线索二叉树
    #include<iostream>
    using namespace std;
    
    typedef struct BiThrNode{
        char data;
        struct BiThrNode *lchild,*rchild;
        int LTag,RTag;
    }BiThrNode,*BiThrTree;
    
    BiThrNode *pre=new BiThrNode;
    
    void CreateBiTree(BiThrTree &T){
        char ch;
        cin>>ch;
        if(ch='#') T=NULL;
        else{
            T=new BiThrNode;
            T->data=ch;
            CreateBiTree(T->lchild);
            CreateBiTree(T->rchild);
        }
    }
    
    void InTreading(BiThrTree p){
        if(p){
            InTreading(p->lchild);
            if(!p->lchild){
                p->LTag=1;
                p->lchild=pre;
            }else{
                p->LTag=0;
            }
            if(!pre->rchild){
                pre->RTag=1;
                pre->rchild=p;
            }else{
                pre->RTag=0;
            }
            pre=p;
            InTreading(p->rchild);
        }
    }
    
    void InOrderTreading(BiThrTree &Thrt,BiThrTree T){
        Thrt=new BiThrNode;
        Thrt->LTag=0;
        Thrt->RTag=1;
        Thrt->rchild=Thrt;
        if(!T){
            Thrt->lchild=Thrt;
        }else{
            Thrt->lchild=T;
            pre=Thrt;
            InTreading(T);
            pre->rchild=Thrt;
            pre->RTag=1;
            Thrt->rchild=pre;
        }
    
    }
    
    //start
    void InOrderTraverse_Thr(BiThrTree T){
        BiThrTree p;
        p=T->lchild;
        while(p!=T){
            while(p->LTag==0){
              p=p->lchild;  
            }
            cout<<p->data;
            while(p->RTag==1&&p->rchild!=T){
                p=p->rchild;
                cout<<p-<data;
            }
            p=p->rchild;
        }
    }
    
    void main(){
        pre->RTag=1;
        pre->rchild=NULL;
        BiThrTree tree,Thrt;
        cout<,"please input:
    ";
        CreateBiTree(tree);
        InOrderTreading(Thrt,tree);
        cout<<"result is:
    ";
        InOrderTraverse_Thr(Thrt);
        cout<<endl;
    }
    
  • 相关阅读:
    011-iOS核心动画(Core Animation)
    010-CALayer(图层)
    009-手势触摸事件处理
    008-Quartz2D
    007-多控制器管理及其控制器间的数据传递
    007-多控制器管理(控制器间的数据传递)
    通过底层 socket 监控 http/https 思路
    NDK 线程同步
    时间同步算法探究
    Android 事件小结
  • 原文地址:https://www.cnblogs.com/ygjzs/p/11874611.html
Copyright © 2011-2022 走看看