当前位置: 首页 > news >正文

数据结构 - 二叉树

递归实现前中后序遍历

#include<stdio.h>
#include<stdlib.h>#define TElemType inttypedef struct BiTNode{TElemType data;struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
BiTNode root;void visit(TElemType& e){printf("%d",e);
}void Preorder(BiTree T,void(*visit)(TElemType& e)){if(T==NULL)return;else{visit(T->data);Preorder(T->lchild, visit);Preorder(T->rchild, visit);}
}void Inorder(BiTree T,void(*visit)(TElemType& e)){if(T==NULL)return;else{Preorder(T->lchild, visit);visit(T->data);Preorder(T->rchild, visit);}
}void Postorder(BiTree T,void(*visit)(TElemType& e)){if(T==NULL)return;else{Preorder(T->lchild, visit);Preorder(T->rchild, visit);visit(T->data);}
}int main( ){return 0;
}

非递归实现中序遍历

#include<stdio.h>
#include<stdlib.h>#define TElemType inttypedef struct BiTNode{TElemType data;struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
BiTNode root;void visit(TElemType& e){printf("%d",e);
}#define DataType BiTreetypedef struct{DataType *s;int t;int MAXNUM;
}SeqStack,*PSeqStack;
void push_seq(PSeqStack pastack,DataType x){if(pastack->t==pastack->MAXNUM-1)printf("\n Stack is full!");else pastack->s[++pastack->t]=x;
}PSeqStack createEmptyStack_seq(int m){PSeqStack stack = (PSeqStack)malloc(sizeof(SeqStack));if(stack){stack->s=(DataType*)malloc(sizeof(DataType)*m);if(!stack->s){free(stack);return 0;}stack->t=-1;stack->MAXNUM=m;return stack;}return 0;
}int isEmptyStack_seq(PSeqStack pastack){return (pastack->t==-1)?1:0;
}int pop_seq(PSeqStack pastack){if(isEmptyStack_seq(pastack)){printf("\n Stack is free!");return 0;}pastack->t--;return 1;
}DataType top_seq(PSeqStack pastack){if(isEmptyStack_seq(pastack)){printf("\n Stack is free!");exit(0);}else{return (pastack->s[pastack->t]);}
}
BiTNode *GoFarLeft(BiTree T,SeqStack *S){if(!T)return NULL;while (T->lchild) {push_seq(S, T);T=T->lchild;}return T;
}void Inorder_I(BiTree T,void(*visit)(TElemType& e)){SeqStack *S = createEmptyStack_seq(10);BiTree t = GoFarLeft(T, S);while (t) {visit(t->data);if(t->rchild)t=GoFarLeft(t->rchild, S);else{if (!isEmptyStack_seq(S)) {t=top_seq(S);pop_seq(S);}else t = NULL;}}
}int main( ){return 0;
}

广度优先遍历

#include<stdio.h>
#include<stdlib.h>#define TElemType inttypedef struct BiTNode{TElemType data;struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
BiTNode root;void visit(TElemType& e){printf("%d",e);
}typedef  BiTree  DataType;
typedef struct Qnode QNode;typedef struct Qnode{DataType info;QNode *link;
}*QueuePtr;typedef  struct{QueuePtr front;QueuePtr rear;
}LinkQueue,*PLinkQueue;LinkQueue q;LinkQueue initQueue(){LinkQueue Q;Q.front = Q.rear = (QueuePtr)malloc(sizeof(QNode));if(!Q.front)exit(0);Q.front->link=NULL;return Q;
}int enQueue(PLinkQueue q,DataType x){QueuePtr qnode = (QueuePtr)malloc(sizeof(QNode));if(!qnode)return 0;qnode->info=x;qnode->link=NULL;q->rear->link = qnode;q->rear=qnode;return 1;
}DataType deQueue(PLinkQueue q){if(q->front==q->rear)return 0;QueuePtr p=q->front->link;DataType e = p->info;q->front->link=p->link;if(q->rear==p)q->rear=q->front;free(p);return e;
}
int queempty(LinkQueue q){if(q.front->link)return 1;else return 0;
}void LevelOrder(BiTree root){BiTree tnode = root;if(root==NULL)exit(0);LinkQueue q = initQueue();enQueue(&q,tnode);while (!queempty(q)) {tnode = deQueue(&q);printf("%d",tnode->data);if(tnode->lchild)enQueue(&q, tnode->lchild);if(tnode->rchild)enQueue(&q, tnode->rchild);}
}int main( ){return 0;
}
http://www.lryc.cn/news/191004.html

相关文章:

  • 【Overload游戏引擎细节分析】从视图投影矩阵提取视锥体及overload对视锥体的封装
  • Linux 安全 - LSM hook点
  • 【iOS逆向与安全】越狱检测与过检测附ida伪代码
  • Android Studio gradle手动下载配置
  • ChatGPT Prompting开发实战(十三)
  • 银河麒麟 ARM 架构 离线安装Docker
  • 虹科科技 | 探索CAN通信世界:PCAN-Explorer 6软件的功能与应用
  • SELECT COUNT(*)会不会导致全表扫描引起慢查询
  • 英国物联网初创公司【FourJaw】完成180万英镑融资
  • 许战海战略文库|无增长则衰亡:中小型制造企业增长困境
  • 广州华锐互动:候车室智能数字孪生系统实现交通信息可视化
  • 智慧工地:助力数字建造、智慧建造、安全建造、绿色建造
  • 增强基于Cortex-M3的MCU以处理480 Mbps高速USB
  • 山海鲸汽车需求调研系统:智慧决策的关键一步
  • 视频缩放的概念整理-步长数组
  • TensorFlow入门(二十一、softmax算法与损失函数)
  • UDP通信:快速入门
  • 修炼k8s+flink+hdfs+dlink(四:k8s(一)概念)
  • redis与 缓存击穿、缓存穿透、缓存雪崩
  • 印度网络安全:威胁与应对
  • AR动态贴纸SDK,让创作更加生动有趣
  • MySQL常用命令01
  • Java synchronized 关键字
  • 滑动窗口算法(C语言描述)
  • 【已修复】vcruntime140.dll有什么用,vcruntime140.dll缺失如何修复
  • 10月12日,每日信息差
  • 网络安全技术(黑客学习)——自学方法
  • 引领创新浪潮:“Polygon探寻新技术、新治理、新代币的未来之路!“
  • Android 13.0 添加自定义服务,并生成jar给第三方app调用
  • PG14归档失败解决办法archiver failed on wal_lsn