基础简单的数据结构-C语言-二叉树链表构造

来源:互联网 发布:saas软件销售模式 编辑:程序博客网 时间:2024/05/16 12:39

二叉树是树的一种,只因该树中规定结点至多有两个子结点,故称二叉树。对比与树,二叉树可以是一颗空树,而树必须要有一个根结点。


满二叉树:一颗树种所有的叶结点都在同一层,而其他非终结点(叶节点以外的结点)分度均为2


完全二叉树:去掉最后一层是一颗满二叉树,且最后一层的叶结点都靠左


下面给出二叉树的构建,这里的构建是照一颗二叉查找树的规则去构建,即左叶结点小于根结点,右结点不小于

根节点,这里还没有涉及到BST(二叉查找树)的插入删除等,只是简单的构建

-----------------------------------------------------------------------------------------------------------

#include<iostream>#include<stdio.h>#include<stdlib.h>//结构体链表的建立struct tree{struct tree * left;int date;struct tree * right;};typedef struct tree treenode;typedef struct tree * b_tree;b_tree insert(b_tree root,int node){    b_tree newnode; //为一个数据创建一个结点    b_tree currentnode;//最后数据插入的位置    b_tree parentnode;//保存最后插入位置的父结点    newnode=(b_tree)malloc(sizeof(treenode));//分配空间    newnode->date=node;    newnode->left=NULL;    newnode->right=NULL;    if(root==NULL)//第一个结点的建立        return newnode;    else    {        currentnode=root;//存储当前的结点,我们要插入的数据        while(currentnode!=NULL)//去寻找新的这个数据应该在哪里插入        {        parentnode=currentnode;//寻找是需要保存最后插入位置的父结点        if(currentnode->date>node)//小于则往左走            currentnode=currentnode->left;//        else            currentnode=currentnode->right;        }    if(parentnode->date>node)        parentnode->left=newnode;     else        parentnode->right=newnode;}return root;}b_tree create(int *data,int len){    int i;    b_tree root=NULL;    for(i=1;i<=len;i++)        root=insert(root,data[i]);    return root;}void display(b_tree root)//中序打印{    if(root!=NULL)    {        printf("%d",root->date);        display(root->left);        display(root->right);    }}int main(){//测试int i,n;b_tree root=NULL;printf("how many sum:?\n");scanf("%d",&n);int node[n+1];for(int i=1;i<=n;i++)    scanf("%d",&node[i]);root=create(node,n);display(root);printf("\n");}


0 0