请问C语言如何创建二叉树????

作者&投稿:邵洪 (若有异议请与网页底部的电邮联系)
二叉树(C语言)怎么创建?~

C语言中二叉树的创建需要用到结构体来定义一个树的数据类型。树这个数据结构有一些数据域,和多个指针域。当然,对于二叉树而言,一般可以定义两个指针域,分别指向root节点的左右子节点。数据结构定义:
struct tree{
int data; //这里数据域以此为例
tree*right,*left;};
真正构建二叉树可以使用动态内存申请,这是一种比较常见的方法(如果不会动态内存申请,可以先看看),但是这样做在子树很多时会耗费较多时间。
因此可以事先开辟好一段内存空间用于存储树。比如 tree T[2000];如果需要建立新的子树,那么只需将数组中某个左右子节点赋值即可。
如有疑问,欢迎继续追问。

#include
typedef char TElemType;
typedef struct BiTNode /*结点定义*/
{
TElemType data;
struct BiTNode *lchild;
struct BiTNode *rchild;
}BiTNode,*BiTree;

BiTNode *CreateBiTree()
{
char c;
BiTNode *Root;
scanf("%c",&c);
if(c=='@') Root=NULL;
else{
Root=(BiTNode *)malloc(sizeof(BiTNode));
Root->data=c;
Root->lchild=CreateBiTree();
Root->rchild=CreateBiTree();
}
return(Root);
}

void PrintTree(BiTree T,int h)
{
int i;
if (T){
PrintTree(T->rchild,h+1);
for(i=0;i<h;i++) printf(" ");
printf("%c
",T->data);
PrintTree(T->lchild,h+1);
}
}

main( )
{
BiTNode* Root;
Root=CreateBiTree();
PrintTree(Root,0);
return 0;
}

创建二叉树的源程序如下:

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

 }

}



#include<stdio.h>
#include<stdlib.h>
typedef struct BiTreeNode{
int data;
struct BiTreeNode *lchild,*rchild; //左右孩子指针
}BiTNode,*BiTree;
int main()
{
BiTree CreateBiTree();
void previsit(BiTree T);
BiTree BT=CreateBiTree();
puts("OK@!");
previsit(BT);
putchar('\n');
return 0;

}
//BiTNode *lchilde ,*rchilde;
BiTree CreateBiTree(){
//按先后顺序输入儿茶书中的节点值,*字符表示空 输入时按层次遍历输入
//构造二叉链表示的二叉树
char ch;
BiTree T;
scanf("%c",&ch);
if(ch=='*')
T=NULL;

else
{
T=(BiTNode*)malloc(sizeof(BiTNode));
if(!T)
return(0);
T->data=ch; //生成根节点
T->lchild=CreateBiTree(); //构造左子树
T->rchild=CreateBiTree(); //构造右子树
}
return T;
} //CreatBiTree
void previsit(BiTree T)
{
//采用二叉树链表存储结构,visit 是对数据结构表元素操作的应用函数。
if(T)
{
printf("%c ",T->data);
previsit(T->lchild);
previsit(T->rchild);
}

}
以上是简单构造和先序遍历,有问题可以留言

二叉树是采用递归定义的,实现起来代码简洁(也许并不简单)。并且它在具体的计算机科学中有很重要的运用,是一种很重要的数据结构,二叉树有三种遍历和建立的方式。今天先学习一下它的建立和打印。
以下代码在Win-Tc1.9.1下编译通过。

#include <stdio.h>
#define ElemType char
//节点声明,数据域、左孩子指针、右孩子指针
typedef struct BiTNode{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
//先序建立二叉树
BiTree CreateBiTree(){
char ch;
BiTree T;
scanf("%c",&ch);
if(ch=='#')T=NULL;
else{
T = (BiTree)malloc(sizeof(BiTNode));
T->data = ch;
T->lchild = CreateBiTree();
T->rchild = CreateBiTree();
}
return T;//返回根节点
}
//先序遍历二叉树
void PreOrderTraverse(BiTree T){
if(T){
printf("%c",T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}

//中序遍历
void InOrderTraverse(BiTree T){
if(T){
PreOrderTraverse(T->lchild);
printf("%c",T->data);
PreOrderTraverse(T->rchild);
}
}
//后序遍历
void PostOrderTraverse(BiTree T){
if(T){
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
printf("%c",T->data);
}
}
void main(){
BiTree T;
T = CreateBiTree();//建立
PreOrderTraverse(T);//输出
getch();
}


c语言编程问题,求大神指导第二题。谢谢
include<stdio.h> long mypower(int m,int n){if(n==0)return 1;else return m*mypower(m,n-1);} int main(){ int m,n;scanf("%d%d",&m,&n);printf("%ld\\n",mypower(m,n));getch();return 0;}

问一下C语言中关于二维数组初始化的问题 在进行二维数组初始化时,可以...
如果全部元素的初值都已提供,则数组的第一维长度可以不指定,但第二维长度不能省略。所以你的例子是错的 a[2][3]需要六个 a[3][3]需要九个 7不能被整除

问一下C语言,请指教,谢谢
1、(n%3 == 0) || (n%7 == 0)2、字母,数字,下划线;不能为数字 3、后者是用于宏的 4、11 (因为1 + 2 * 3 + 4)5、while(*s++ = *t++);1、C 2、C 3、B 4、D 5、ga D 6、A 7、B 8、B 9、D

C语言问题。。
第一题,*s+2, 运算符优先级决定了先算 (*s), 再加2,再按 %c 格式输出。(*s) 得到的是 s[0]的 ASCII 编码值,等于字符常量 'N' ,再加2 就是 字母 N 后面2位那个 P,它 等于字符常量 'P', 按 %c 格式输出 为 P. 答案 选 A. P 第二题,最后一个选项: (2*...

C语言程序设计该如何入门?
Bjarne Stroustrup的《C++语言的设计与演化》(The Design and Evolution of C++)和David R.Hanson 的《C语言接口与实现 创建可重用软件的技术》(C Interfaces and Implaementations Techniques for Creating Reusable Software)一定要看,这两本书讲述了如何用C来实现异常处理、实现类型的封装和扩展等一些大的项目中...

问一道C语言题目
while(){}这种方式是,满足条件才进入循环体,有可能一次也不会进入循环。do{}while()这种是,先进入一次循环体,然后才判断是否满足条件,注意,这种方式是无论条件是否满足,都会循环一次,另外,它的退出条件是不满足了,才退出。对于本题,首先第一次进入循环,输出:4,此时x=4-2=2 然后,判断...

求问第一第二这两个c语言的题目怎么做。求详细的解答步骤
第一题:执行 i = 0后,i = 1;j = 2后, j = 2;a = ++i;该语句先i自加,再把值赋值给a,所以a = 2, i = 2 b = j++; 该语句先把j的值赋值给b,然后j自加。所以,b = 2, j = 3;第二题:执行 i = 1后, i = 1 j = 2后, j = 2 a+= i++;可以把...

如何学习C语言
Bjarne Stroustrup的《C++语言的设计与演化》(The Design and Evolution of C++)和David R.Hanson 的《C语言接口与实现 创建可重用软件的技术》(C Interfaces and Implaementations Techniques for Creating Reusable Software)一定要看,这两本书讲述了如何用C来实现异常处理、实现类型的封装和扩展等一些大的项目中...

用C语言怎么写类似s=2+22+222+2222+22222?希望能给个详尽的解题过程,主 ...
首先,n个2的计算方法是2*(10的n次方)+ (n-1)个2 也就是说,比如已经求出了2222后,变到22222只要加上2乘以10的5次方 而该试首相已知,就是2,那么第二项就是2+2*(10的1次方),第三项就是2+(第二项的结果)*(10的2次方),第四项就是2+(第三项的结果)*(10的3次方),...

C语言 char型 二维数组问题 急!!!
char **b,c;b= (char **)malloc( n * sizeof(char) );for( i = 0 ; i < n ; i++ )b[i] = (char *)malloc( m * sizeof(char) ); \/*插入这个就行了*\/ for(i=0;i<n+2;i++)for(j=0;j<m+2;j++)b[i][j]='0';for(i=1;i<=n;i++){for(j=1;j<=m;...

宜良县19861108826: 请问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* ...

宜良县19861108826: 二叉树(C语言)怎么创建? -
慈风元胡: C语言中二叉树的创建需要用到结构体来定义一个树的数据类型.树这个数据结构有一些数据域,和多个指针域.当然,对于二叉树而言,一般可以定义两个指针域,分别指向root节点的左右子节点.数据结构定义:struct tree{ int data; //这里数据域以此为例 tree*right,*left;}; 真正构建二叉树可以使用动态内存申请,这是一种比较常见的方法(如果不会动态内存申请,可以先看看),但是这样做在子树很多时会耗费较多时间.因此可以事先开辟好一段内存空间用于存储树.比如 tree T[2000];如果需要建立新的子树,那么只需将数组中某个左右子节点赋值即可.如有疑问,欢迎继续追问.

宜良县19861108826: c语言数据结构:怎么建立一个二叉树? -
慈风元胡: 只要将一个二叉树用“括号表示法”表示出来,然后,用链式存储结构将其各个结点存储就可以了,也就是输入一个二叉树.最后,用中序遍历输出! typedef struct node{ ElemType data;struct node *lchild,*rchild;} BTNode; //创建一个二叉树...

宜良县19861108826: C语言建立二叉树 -
慈风元胡: 根据二叉树的父节点和子节点的关系来创建 比如,父节点的编号是1,那么左子节点的编号就是2,右子节点的编号就是3 关系父节点编号为i,则左子节点编号为2*i,右子节点编号为2*i+1 然后按照从小到大的顺序赋值就行了 比如操作 先i=1;...

宜良县19861108826: 数据结构二叉树的创建(c语言版) -
慈风元胡: //输入的格式为:abd##e##c###include "stdlib.h"typedef int Element;struct Tree {Element data;struct Tree *left;struct Tree *right; };void CreateBinSortTree(struct Tree **t); void InsertNode2Tree(struct Tree **root, Element num);void ...

宜良县19861108826: 求数据结构(C语言版)建立二叉树的代码~~急~~谢谢了 -
慈风元胡: BT.H文件 #include <stdio.h> #include <malloc.h> #include <conio.h> #define TRUE 1 #define FALSE 0 #define ERROR 0 #define OK 1 #define Stack_Size 50 #define NUM 50 #define MAXSIZE 50 //队列的最大长度 //定义二叉树 typedef char ...

宜良县19861108826: 如何用C语言定义一个二叉树 -
慈风元胡: typedef struct Node { int data;//结点的内容 struct Node* leftchird; struct Node* rightchird; }NODE; typedef struct tree { NODE* root;//树的根 int num;//树结点个数 }TREE;//二叉树

宜良县19861108826: 如何用C语言创建二叉树 -
慈风元胡: 创建的方法有很多啊 可以用链表,可以用数组,而且你的创建到底是形成一个数据结构,还是实实在在的建树呢 假如这样 struct TreeNode {int data;TreeNode *leftChild;TreeNode *rightChild; }这就是一个树了.你建立很多节点,然后让左右孩子指向你想要的.也是树.

宜良县19861108826: 用C语言实现二叉树的操作 -
慈风元胡: #include#define STACK_MAX_SIZE 30 #define QUEUE_MAX_SIZE 30 #ifndef elemType typedef char elemType; #endif /************************************************************************/ /* 以下是关于二叉树操作的11个简单算法...

宜良县19861108826: 如何用c语言写一个二叉树的代码 -
慈风元胡: 用结构体存储二叉树节点 一个数值成员, 存值 两个指针, 分别指向左右子树 然后 做二叉树相关的函数就好. struct node{int value;struct node *left, *right; };

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网