二叉树的非递归遍历——前序

来源:互联网 发布:win10优化不了怎么办 编辑:程序博客网 时间:2024/05/17 08:19

**

二叉树的非递归遍历——前序

**
1.核心思想

①非递归,即必须要利用栈来实现;②前序遍历的顺序为,先输出当前节点数据域的值,再输出其左子树上的值,其次为右子树;③利用栈的先进后出,先将右子树存入,再将左子树存入,出栈时自然先左后右,将这个过程写入循环,即可实现非递归遍历;

2.代码
①结构体类型

typedef struct Node{    int data;    struct Node *left;    struct Node *right;}BTNode; 

②核心代码

void Forder(BTNode *root){//传入一颗二叉树BTNode **S=(BTNode**)malloc(N*sizeof(BTNode*));//申请一段空间来存放节点,N为总节点个数(虽然用不完)int top=-1;//栈顶指针初始化BTNode *p;//接受出栈的节点S[++top]=root;//先将根节点入栈while(top!=-1){//当栈顶指针为-1时停止,这里也可用do while结构,个人喜好p=S[top--];//前序遍历,先出栈cout<<p->data<<"\t";if(p->right) S[++top]=p->right;//先进后出,故先存右子女if(p->left) S[++top]=p->left;}free(S);//最后将所申请的空间释放掉} 

③主函数

int main(void){        int Data[8]={3,2,5,8,4,7,6,9};        BTNode *root=CreateTree(Data,8);//参考二叉搜素数的创建        Forder(root);}

3输出效果
这里写图片描述

有疑问欢迎留言讨论………..