第一次在CSDN上写博客,今天开启自己的编程之路。以前总觉得上课嘛,把老师讲的东西学会,考试能过就好了。但是后来发现,自己被这种想法坑惨了。知识点当时是学会了,但是随着考试的结束,学到的知识也一并还给了老师!!!这对于找工作的我来说,打击相当之大。现在下定决心要好好学习,重拾忘掉的知识。先从二叉树开始吧!
今天看了二叉树的先序遍历,便尝试着写了二叉树的先序遍历算法(非递归)。以下代码为已经编译运行过的代码:

#include "stdafx.h"
#include "stdlib.h"typedef struct BiTNode
{char data;//节点保存的数据struct BiTNode *lchild,*rchild;//指向左子树和右子树的指针
}BiTNode,*BiTree;//二叉树的节点类型typedef struct SqStack
{BiTNode *base;//栈底指针BiTNode *top;//栈顶指针int stacksize;//栈的大小
}SqStack;//顺序栈//构造一个空栈(顺序栈)
int InitStack(SqStack &S)
{S.base = (BiTNode *)malloc(20 * sizeof(BiTNode));//此处默认栈的大小为20if(!S.base)return 0;S.top = S.base;S.stacksize = 20;return 1;
}
//判断栈是否为空,若为空则返回true,否则返回false
bool StackEmpty(SqStack S)
{if(S.base == S.top)return true;elsereturn false;
}
//获取栈顶元素
int GetTop(SqStack S,BiTNode &e)
{if(S.base == S.top){return 0;}e = *(S.top - 1);return 1;
}
//进栈操作
int Push(SqStack &S,BiTNode e)
{if(S.top - S.base == S.stacksize)return 0;*S.top = e;S.top ++;return 1;
}
//出栈操作
int Pop(SqStack &S,BiTNode &e)
{if(S.base == S.top)return 0;S.top --;e = *S.top;return 1;
}
//先序遍历二叉树
int PreOrderBiTree(BiTree T)
{if(!T)return 0;BiTNode p;SqStack S;InitStack(S);Push(S,*T);while(!StackEmpty(S)){Pop(S,p);printf("%c  ",p.data);if(p.rchild)Push(S,*p.rchild);if(p.lchild)Push(S,*p.lchild);}printf("\n");return 1;
}
//创建二叉树
void CreateBiTree(BiTree &T)
{char ch;scanf("%c",&ch);if('#' == ch)T = NULL;else{T = (BiTNode *)malloc(sizeof(BiTNode));T->data = ch;CreateBiTree(T->lchild);CreateBiTree(T->rchild);}
}int main(int argc, char* argv[])
{BiTree T = NULL;printf("请按照先序遍历顺序输入二叉树\n");CreateBiTree(T);printf("先序遍历二叉树结果为:\n");PreOrderBiTree(T);return 0;
}

对于上图所示的二叉树,其先序遍历:ABDEFCG,按照先序遍历构建二叉树,子树为空时输入字符为#,
则构建二叉树输入序列为:ABD##EF###C#G##
测试结果如下:

至于二叉树的先序遍历递归算法以及中序、后序遍历的递归、非递归算法,后续学到再更新~

二叉树先序遍历算法--C语言相关推荐

  1. 二叉树非递归后序遍历算法(C语言)

    二叉树非递归后序遍历算法(C语言) 二叉树后序遍历的规律:左右根 后序非递归遍历中,访问根(子根)结点有两种情况 ①:遍历完左子树,需要遍历右子树,需要从栈中访问最顶上的根(子根)结点从而得到右子树的 ...

  2. 二叉树的递归遍历算法c语言 数据结构,递归创建二叉树c语言实现+详细解释

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 void CreatBiTree(BiTree T) { char a; scanf("%c",&a); if(a=='@') ...

  3. C++ morris inorder二叉树中序遍历(附完整源码)

    C++ morris inorder二叉树中序遍历 morris inorder二叉树中序遍历算法的完整源码(定义,实现,main函数测试) morris inorder二叉树中序遍历算法的完整源码( ...

  4. 数据结构——二叉树的递归遍历算法与非递归遍历算法+层次遍历算法

    (文章篇幅有点长,二叉树的递归遍历算法不作详细分析,但是二叉树的非递归遍历算法和层次遍历算法都有非常详细的分析过程,记得往下翻哦!) 二叉树的递归遍历算法实现 我们首先用递归的方法先序遍历创建这样一棵 ...

  5. 【C语言】二叉树中序遍历(递归和非递归)算法

    二叉树中序遍历的实现思想是: 访问当前节点的左子树: 访问根节点: 访问当前节点的右子树: 图 1 二叉树 以图  1 为例,采用中序遍历的思想遍历该二叉树的过程为: 访问该二叉树的根节点,找到 1: ...

  6. 后序遍历的非递归算法python_二叉树后序遍历(递归与非递归)算法C语言实现...

    二叉树后序遍历的实现思想是:从根节点出发,依次遍历各节点的左右子树,直到当前节点左右子树遍历完成后,才访问该节点元素. 图 1 二叉树 如图 1 中,对此二叉树进行后序遍历的操作过程为: 从根节点 1 ...

  7. c++ stack 遍历_五分钟C语言数据结构 之 二叉树后序遍历(非递归很重要)

    五分钟C语言实现常见数据结构 今天的内容分享的是二叉树后序遍历 DP问题,欢迎关注 动态规划一篇就够了 全网最详细, 逐步理解, 万字总结 - Johngo的文章 - 知乎 https://zhuan ...

  8. 二叉树非递归后序遍历算法的一种简单思路

    首先从简单的例子开始 1 2 3 上图二叉树的后序遍历序列是"231", 颠倒一下就是"132", 而其前序遍历是"123" 有什么发现? ...

  9. 数据结构与算法练习-二叉树中序遍历

    python数据结构与算法练习-二叉树中序遍历 二叉树中序遍历 思路 python实现 二叉树中序遍历 链接: link. 给定一个二叉树的根节点 root ,返回它的 中序 遍历. 样例 输入:ro ...

最新文章

  1. RADStudio连接MySQL_使用FireDac(Delphi)在Firebird中创建数据库
  2. 计算机二级python用什么书-计算机二级python考什么?
  3. python开发桌面软件-python适合开发桌面软件吗?
  4. U盘安装LINUX系统,拔除U盘后无法引导系统
  5. 【渝粤题库】陕西师范大学209912 金融中介学Ⅰ 作业
  6. 万网与阿里巴巴业务关系图解
  7. shell 删除simatic_安装西门子软件时提示重启电脑的解决办法
  8. greenev —— Python 异步网络服务框架
  9. 《实变函数简明教程》,P78,第16题(依测度收敛 推导 依测度收敛,几乎处处小于 推导 几乎处处小于)
  10. 好看的热力图seaborn.heatmap配色
  11. 作为一个程序员,如何保持优秀
  12. 【爬虫+数据可视化】Python爬取CSDN博客访问量数据并绘制成柱状图
  13. linux文件夹内JPG批量转PNG
  14. 【Akka】Actor模型探索
  15. 谈谈学习 - 费曼技巧,以教促学的好方法
  16. 迭代器模式(实际运用比较少)
  17. Netty的编解码器
  18. 青龙快手极速版最新撸毛脚本(2022.07.30)KS()
  19. 物联网毕业设计-选题推荐
  20. Spark RDD使用详解--RDD原理

热门文章

  1. foss测试_开源研讨会探索大学中的FOSS
  2. 做个锤子的开关,隔壁产品都馋哭了
  3. LCIS vijos—P1264
  4. idea 数据库取消字段隐藏
  5. 写一个python代码,实现在中国国家统计局的官网上收集近3年的GDP数据,然后将这些数据绘制到一个折线图上展示出来...
  6. 英语议论文论据02--------社会发展问题
  7. android 动态波纹效果,Android 水波纹扩散效果
  8. 「深度好文」高频面试题“你会搭建测试环境么”最全解
  9. 计算机操作实际操作课程,(计算机操作课程.doc
  10. freemarker 应用模板导出Execle(解决生成弹出版本不适合)