基础简单的数据结构-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");
}
满二叉树:一颗树种所有的叶结点都在同一层,而其他非终结点(叶节点以外的结点)分度均为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");
}
相关文章推荐
- 基础简单的数据结构-C语言-二叉查找树数组模拟
- C语言数据结构之循环链表的简单实例
- C语言数据结构二叉树简单应用
- 基础简单的数据结构-C语言-动态链表
- 【数据结构】数据结构C语言的实现(简单二叉树)
- c语言简单的数据结构动态链表
- 数据结构的基础-单向链表所构造的栈 c++实现
- 简单数据结构――单向链表
- C语言实现链表简单地实现
- c语言实现的简单二叉树
- C语言链表的基础,malloc()分配内存
- C语言简单的队列链表
- c语言-简单学生信息管理(内存链表练习)
- 数据结构:链表的简单操作
- 队列模拟(简单链表数据结构的处理)
- Java数据结构之简单链表的定义与实现方法示例
- 简单二叉树的构造,前序遍历顺序为;中序遍历顺序为;后序遍历顺序为;
- 二叉树排序 --C语言数据结构
- 《Delphi 算法与数据结构》学习与感悟[6]: 一个简单的"单向链表"
- 链表的C语言实现基础介绍