线索二叉树建立及遍历

层序输入

中序遍历建立线索二叉树

利用头节点遍历线索二叉树

复制代码
#include <bits/stdc++.h>
using namespace std;
typedef char ElemType;
#define MaxSize 100
enum Tag{Link,Thread};
//二叉链表的结构创建 
typedef struct BiTNode{
    ElemType data;
    struct BiTNode *lchild;
    struct BiTNode *rchild;
    Tag ltag,rtag;
}BiTNode,*BiTree;
//层序遍历的方式创建二叉树 
string tree;
BiTree pre,T1;
int CreateTreeSeqTraverse(BiTree &T,int i,int n){
    if(i>=n||i<0) T=NULL;
    else{
        T=(BiTree)malloc(sizeof(BiTNode));
        if(!T) return 0;
        T->ltag=Link;
        T->rtag=Link;
        T->data=tree[i];  
        CreateTreeSeqTraverse(T->lchild,2*i+1,n);
        CreateTreeSeqTraverse(T->rchild,2*i+2,n);
    } 
}  
//中序遍历线索二叉树 
void OrderTraverse(BiTree T){
    if(T){
        OrderTraverse(T->lchild);
        if(T->lchild==NULL){
            T->ltag=Thread;
            T->lchild=pre;
        }
        if(pre->rchild==NULL){
            pre->rtag=Thread;
            pre->rchild=T;
        }
        pre=T;
        OrderTraverse(T->rchild);
    }
} 
//给线索二叉树增加一个头节点
void inOrderThread(BiTree &p,BiTree T){
    p=(BiTree)malloc(sizeof(BiTNode));
    p->ltag=Link;
    p->rtag=Thread;
    p->rchild=p;
    if(!T) p->lchild=p;
    else{
        p->lchild=T;
        pre=p;
        OrderTraverse(T);
        p->rchild=pre;
        pre->rchild=p;
        pre->rtag=Thread;
    }
}
//线索二叉树中序遍历
void Traverse(BiTree p){
    BiTree q=p;
    while(p->ltag==Link)
        p=p->lchild;
    while(p!=q){
        cout<<p->data<<" ";
        p=p->rchild;
    }
} 
int main(){
    BiTree T=NULL,p=NULL;
    getline(cin,tree);
    CreateTreeSeqTraverse(T,0,tree.length());
    inOrderThread(p,T);
    Traverse(p);
}
复制代码

 

posted @   不负韶华。  阅读(60)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示