C语言二叉树非递归前序和中序

为什么只有前序和中序呢?因为我自身事务比较多,所以也只是先把自己写出来的东西分享给大家。(以下思路和内容纯属个人见解,如有不对请指正。)
既然已经看到了这篇博客,那么就是已经知道了什么是二叉树以及二叉树的储存结构,所以这里不在赘述,只简单讲解一下三种遍历的思路(帮助大家理解)
前序遍历:
对于二叉树的每一个节点,都保证先访问根结点,再访问左节点然后是右节点。
例如二叉树ABC(A为左子树,B为AC的父节点,C为右子树),做前序遍历时,就必须先访问B然后是A其次是C。假如A有两个子树D(左子树)和E(右子树)呢,一样的,要先访问A,然后是D其次是E。所以从根结点B开始访问,前序遍历就是BADEC。
中序遍历:
同上,保证每一次访问,都是先访问左子树,然后父节点,最后右子树。
后序遍历:
同上,保证每一次访问,都是先访问左子树,然后右子树,最后父节点。
如果大家实在理解有点困难,不妨将将一个大的二叉树想成一个个小的二叉树,每一个小的二叉树仅有三个节点,对应左子树,父节点,右子树。让这一个个小的二叉树按照上面的规则访问,那么大的二叉树是不是也就按照规则来了呢?

好了=-= 如果还理解不了我就莫法了(QAQ) 下面开始进入非递归前序和中序:
先创建一个二叉树吧(前序创建):

#include<stdio.h>
#include<stdlib.h>#include<string.h>#define CRT_SECURE_NO_WARNINGS#define MAX 100typedef struct BiTNode {//定义二叉树内部结构	
int data;	
struct BiTNode* LChild;	
struct BiTNode* RChild;}BiTNode,BiTree;//BiTNode是节点,BiTree是根节点

非递归前序:
思路:由于我们采用递归算法时,系统会帮我们开辟一个隐式的栈来储存尚未进入算法的代码,所以写非递归我们需要自己开辟一个栈来储存那些没有执行到的代码。


已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页