二叉树的非递归建立

来源:互联网 发布:知金教育是做什么的 编辑:程序博客网 时间:2024/04/28 01:50

                                                                                                                         二叉树的非递归建立

              

                           思想:非递归建立一个二叉树,要做的就是不断的往一个树里面去插入一个新的结点  即插入法建立二叉树

                           实现步骤:

                                                 第一步:申请一个结点空间,并进行初始化,判断树是否为空,如果为空,返回新结点,则已经新建了一棵树

                                                 第二步:如果不为空,循环遍历,如果插入的值比左孩子孩子小,那么一直往左边找,如果大于右孩子,那么往右边开始找,最后插入即可

                                                第三步:循环插入即可建立一个二叉树;

                        源代码:

                         

#include<iostream>#include<cstdio>#include<cstdlib>using namespace std;typedef struct Node{    int data;    Node *lch, *rch;}BiNode, *BiTree;BiTree Insert(BiTree root,int key){     BiTree pa, ptr;     BiTree p = root;     ptr = (BiTree)malloc(sizeof(BiNode));     ptr->data = key;     ptr->lch = NULL;     ptr->rch = NULL;     pa = NULL;     if(p == NULL)     {         return ptr;     }     else     {        while(p != NULL)        {            pa = p;            if(key <= p->data)            {               p = p->lch;            }            else            {                p = p->rch;            }       }       if(key <= pa->data)       {           pa->lch = ptr;       }       else       {           pa->rch = ptr;       }    }    return root;}BiTree Creat_Tree(){    BiTree root = NULL;    int data;    scanf("%d", &data);    while(data != 0)    {        root = Insert(root, data);        scanf("%d", &data);    }    return root;}void PreOrder(BiTree root){     if(root != NULL)     {         printf("%d ", root->data);         PreOrder(root->lch);         PreOrder(root->rch);     }}void InOrder(BiTree root){    if(root !=NULL)    {        InOrder(root->lch);        printf("%d ",root->data);        InOrder(root->rch);    }}void PostOrder(BiTree root){    if(root != NULL)    {        PostOrder(root->lch);        PostOrder(root->rch);        printf("%d ", root->data);    }}int main(){    BiTree root ;    root = Creat_Tree();    PreOrder(root);    printf("\n");    InOrder(root);    printf("\n");    PostOrder(root);    return  0;}


      

原创粉丝点击