本文目录一览:
请问C语言如何创建二叉树????
创建二叉树的源程序如下:
#include cstdlib
#include stdio.h
typedef struct node
{ //树的结点
int data;
struct node* left;
struct node* right;
} Node;
typedef struct
{ //树根
Node* root;
} Tree;
void insert(Tree* tree, int value)//创建树
{
Node* node=(Node*)malloc(sizeof(Node));//创建一个节点
node-data = value;
node-left = NULL;
node-right = NULL;
if (tree-root == NULL)//判断树是不是空树
{
tree-root = node;
}
else
{//不是空树
Node* temp = tree-root;//从树根开始
while (temp != NULL)
{
if (value temp-data)//小于就进左儿子
{
if (temp-left == NULL)
{
temp-left = node;
return;
}
else
{//继续判断
temp = temp-left;
}
}
else {//否则进右儿子
if (temp-right == NULL)
{
temp-right = node;
return;
}
else {//继续判断
temp = temp-right;
}
}
}
}
return;
}
void inorder(Node* node)//树的中序遍历
{
if (node != NULL)
{
inorder(node-left);
printf("%d ",node-data);
inorder(node-right);
}
}
int main()
{
Tree tree;
tree.root = NULL;//创建一个空树
int n;
scanf("%d",n);
for (int i = 0; i n; i++)//输入n个数并创建这个树
{
int temp;
scanf("%d",temp);
insert(tree, temp);
}
inorder(tree.root);//中序遍历
getchar();
getchar();
return 0;
}
扩展资料:
简单二叉树定义范例:此树的顺序结构为:ABCDE
#include cstdlib
#include stdio.h
#include string
int main()
{
node* p = newnode;
node* p = head;
head = p;
string str;
cin str;
creat(p, str, 0)//默认根结点在str下标0的位置
return 0;
}
//p为树的根结点(已开辟动态内存),str为二叉树的顺序存储数组ABCD##E或其他顺序存储数组,r当前结点所在顺序存储数组位置
void creat(node* p, string str, int r)
{
p-data = str[r];
if (str[r * 2 + 1] == '#' || r * 2 + 1 str.size() - 1)p-lch = NULL;
else
{
p-lch = newnode;
creat(p-lch, str, r * 2 + 1);
}
if (str[r * 2 + 2] == '#' || r * 2 + 2 str.size() - 1)p-rch = NULL;
else
{
p-rch = newnode;
creat(p-rch, str, r * 2 + 2);
}
}
数据结构 c语言版二叉树(1) 建立一棵含有n个结点的二叉树,采用二叉链表存储;
#includestdio.h
#includestdlib.h
typedef struct node *tree_pointer;
struct node{
char ch;
tree_pointer left_child,right_child;
};
tree_pointer root=NULL;
tree_pointer create(tree_pointer ptr)
{
char ch;
scanf("%c",ch);
if(ch==' ')
ptr=NULL;
else{
ptr=(tree_pointer)malloc(sizeof(node));
ptr-ch=ch;
ptr-left_child=create(ptr-left_child);
ptr-right_child=create(ptr-right_child);
}
return ptr;
}
void preorder(tree_pointer ptr)
{
if(ptr){
printf("%c",ptr-ch);
preorder(ptr-left_child);
preorder(ptr-right_child);
}
}
void inorder(tree_pointer ptr)
{
if(ptr){
inorder(ptr-left_child);
printf("%c",ptr-ch);
inorder(ptr-right_child);
}
}
void postorder(tree_pointer ptr)
{
if(ptr){
postorder(ptr-left_child);
postorder(ptr-right_child);
printf("%c",ptr-ch);
}
}
void main()
{
printf("构建一个二叉树(结点数为n):\n");
root=create(root);
printf("前序遍历二叉树:\n");
preorder(root);
printf("\n");
printf("中序遍历二叉树:\n");
inorder(root);
printf("\n");
printf("后序遍历二叉树:\n");
postorder(root);
printf("\n");
}
如何用C语言用顺序表和链表分别建一个二叉树
#includestdio.h
typedef struct node
{
char data;
struct node *lchild;
struct node *rchild;
}BitTree;
BitTree *creat_bt(int n);
BitTree *p[10];
int main()
{
BitTree *h;
int n;
printf("请输入你节点数\n");
scanf("%d",n);
h=creat_bt(n);
return 0;
}
BitTree *creat_bt(int n)
{
BitTree *s,*t;
int j,i;
while(n--)
{
s=new(BitTree);
scanf("%d%c",i,s-data);
s-lchild=s-rchild=NULL;
p[i]=s;
if(i==1)
t=s;
else
{
j=i/2;
if(i%2==0)
p[j]-lchild=s;
else
p[j]-rchild=s;
}
}
return t;
}
这个是我用链表创建的二叉树