二叉树的非递归建立

                                                                                                                         二叉树的非递归建立

              

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

                           实现步骤:

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

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

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

                        源代码:

                         

#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;
}


      

wangxiaoming CSDN认证博客专家 架构 Spring Boot Redis
博客是很好的总结和记录工具,如果有问题,来不及回复,关注微信公众号:程序员开发者社区,获取我的联系方式,向我提问,也可以给我发送邮件,联系 1275801617@qq.com
©️2020 CSDN 皮肤主题: Age of Ai 设计师: meimeiellie 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值