您的位置:首页 > 理论基础 > 数据结构算法

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

2017-05-02 11:31 447 查看
二叉树是树的一种,只因该树中规定结点至多有两个子结点,故称二叉树。对比与树,二叉树可以是一颗空树,而树必须要有一个根结点。

满二叉树:一颗树种所有的叶结点都在同一层,而其他非终结点(叶节点以外的结点)分度均为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");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息