求数据结构树与二叉树转换C语言代码
#include #include #include using namespace std;struct Node{int key, heap, tot;Node *left, *right;} *root;int getT(Node *root){if (root == NULL)return 0;return root->tot;}void Update(Node *root){if (root == NULL)return;root->tot = getT(root->left) + getT(root->right) + 1;}Node *Merge(Node *p, Node *q){if (p == NULL)return q;if (q == NULL)return p;if (p->heap heap){p->right = Merge(p->right, q);Update(p);return p;}else{q->left = Merge(p, q->left);Update(q);return q;}}void Delete(Node *&root){root = Merge(root->left, root->right);Update(root);}void find1(Node *&root, int k){if (root == NULL)return;if (k == root->key){Delete(root);return;}if (k key)find1(root->left, k);elsefind1(root->right, k);Update(root);}int find2(Node *root, int k){if (root == NULL)return -1;int left = getT(root->left);if (left + 1 == k)return root->key;if (left >= k)return find2(root->left, k);elsereturn find2(root->right, k - left - 1);}int find3(Node *root, int k){if (root == NULL)return -1;if (k key)return find3(root->left, k);elsereturn max(find3(root->right, k), root->key);}void Insert(Node *&root, int k){if (root == NULL){root = new Node;root->key = k;root->heap = rand();root->tot = 1;root->left = root->right = NULL;return;}root->tot++;if (k key){Insert(root->left, k);if (root->left->heap heap){Node *tmp = root->left;root->left = tmp->right;tmp->right = root;Update(root);Update(tmp);root = tmp;}}else{Insert(root->right, k);if (root->right->heap heap){Node *tmp = root->right;root->right = tmp->left;tmp->left = root;Update(root);Update(tmp);root = tmp;}}}int main(int argc, const char *argv[]){return 0;}
#include
#include
#define DEGREE 5 //树的高度
#define NULL 0
#define QUEUESIZE 10
#define MAX_NODE_NUM 100
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@树和二叉树的结构体@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
typedef struct st1//树节点的类型
{
char data;//数据域,采用char星
struct st1 *children[DEGREE];//指向孩子节点的指针域
}CTreeNode;
typedef struct st2
{
char data;//数据域
struct st2 *lchild,*rchild;//左右孩子节点的指针
}BTreeNode;
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@查找树的节点@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
CTreeNode *SearchCTree(CTreeNode *root ,char data)
{
int i;
CTreeNode *returnNode;
if(root->data==data)
return root;
else
{
for(i=0;i<DEGREE;i++)
{
if(root->children[i]==NULL)
return NULL;
else
{
returnNode=SearchCTree(root->children[i],data);//递归查找
if(returnNode!=NULL)
return returnNode;
}
}
}
}
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@生成树@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
CTreeNode *CreateSTree()
{
int i,j,k;
char data, parent;;
CTreeNode *root,*parentNode,*node;
printf("请输入树的节点的数量:");
scanf("%d",&j);
fflush(stdin);//清除键盘缓存
if(j==0)
return NULL;//空树,结束函数
printf("请输入根节点的数据:");
scanf("%c",&data);
fflush(stdin);
root=(CTreeNode *)malloc(sizeof(CTreeNode));
root->data=data;
for(i=0;i<DEGREE;i++)
root->children[i]=NULL;
for(i=2;i<=j;i++)//依次输入每个节点的信息
{
printf("请输入第%d个节点的数据及其父节点的数据:",i);
scanf("%c%c",&data,&parent);//切记当以%c号格式输入数据时候,不要输入空格
fflush(stdin);
node=(CTreeNode *)malloc(sizeof(CTreeNode));
node->data=data;
for(k=0;k<DEGREE;k++)
node->children[k]=NULL;
//printf("验证parent=%c
",parent);
parentNode=SearchCTree(root,parent);//查找指定数据的节点
for(k=0;k<DEGREE;k++)
{
if(parentNode->children[k]==NULL)
{
parentNode->children[k]=node;
break;
}
}
}
return root;
}
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@树的遍历@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
void preorderTree(CTreeNode *ctroot)//遍历每个节点的操作就是输出该节点的data域
{
CTreeNode *ctchild;
int i;
printf("%c",ctroot->data);//先遍历根节点
for(i=0;i<DEGREE;i++)//依次先序遍历孩子节点
{
ctchild=ctroot->children[i];
if(ctchild==NULL)
break;//孩子节点遍历结束,退出
else
preorderTree(ctchild);//递归先序遍历
}
}
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@结构体类型@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
//树队列结构体类型
typedef struct nodeCTree
{
CTreeNode *CTreeArray[MAX_NODE_NUM];//结构体指针数组,存放节点的地址
//struct nodeCTree *next;
int CTreeFront,CTreeRear;
}QueueCTree;
//二叉树队列结构类型
typedef struct nodeBTree
{
BTreeNode *BTreeArray[MAX_NODE_NUM];//结构体指针数组,存放节点的地址
//struct nodeBTree *next;
int BTreeFront,BTreeRear;
}QueueBTree;
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@初始化队列@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
//初始化树队列
void initQueueCTree(QueueCTree *&q)
{
q=(QueueCTree *)malloc(sizeof(QueueCTree));
q->CTreeFront=q->CTreeRear=0;
}
//初始化二叉树队列
void initQueueBTree(QueueBTree *&q)
{
q=(QueueBTree *)malloc(sizeof(QueueBTree));
q->BTreeFront=q->BTreeRear=0;
}
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@入队列@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
//树队列元素入队
int addQueueCTree(QueueCTree *&q,CTreeNode *ctroot)//
{
if((q->CTreeRear+1)%MAX_NODE_NUM==q->CTreeFront)//队满
return 0;
q->CTreeRear=(q->CTreeRear+1)%MAX_NODE_NUM;
q->CTreeArray[q->CTreeRear]=ctroot;
return 1;//入队列
}
//二叉树队列元素入队
int addQueueBTree(QueueBTree *&q,BTreeNode *btroot)
{
if((q->BTreeRear+1)%MAX_NODE_NUM==q->BTreeFront)//队满
return 0;
q->BTreeRear=(q->BTreeRear+1)%MAX_NODE_NUM;
q->BTreeArray[q->BTreeRear]=btroot;
return 1;//入队列
}
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@队列判空@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
//树的队列判空
int QueueCTreeEmpty(QueueCTree *q)
{
return(q->CTreeFront==q->CTreeRear);
}
//二叉树队列判空
int QueueBTreeEmpty(QueueBTree *q)
{
return(q->BTreeFront==q->BTreeRear);
}
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@出队列@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
//树队列元素出队
CTreeNode *delQueueCTree(QueueCTree *&q)
{
CTreeNode *ctroot;
if(q->CTreeFront==q->CTreeRear)//队空
return NULL;//返回空指针
q->CTreeFront=(q->CTreeFront+1)%MAX_NODE_NUM;
ctroot=q->CTreeArray[q->CTreeFront];
return ctroot;//返回节点
}
//二叉树队列元素出队
BTreeNode *delQueueBTree(QueueBTree *&q)
{
BTreeNode *btroot;
if(q->BTreeFront==q->BTreeRear)//队空
return NULL;//返回空指针
q->BTreeFront=(q->BTreeFront+1)%MAX_NODE_NUM;
btroot=q->BTreeArray[q->BTreeFront];
return btroot;//返回节点
}
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@树转化为二叉树@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
void TreeToBTree(CTreeNode *ctroot,BTreeNode *&btroot)//树转化为二叉树ctroot指向树的根节点,btroot,指向二叉树的跟
{
QueueCTree *VisitedCTreeNodes;
QueueBTree *VisitedBTreeNodes;//辅助队列
initQueueCTree(VisitedCTreeNodes);
initQueueBTree(VisitedBTreeNodes);//初始化队列
CTreeNode *ctnode;
BTreeNode *btnode,*p,*LastSibling;
int i;
btroot=(BTreeNode *)malloc(sizeof(BTreeNode));//添加开辟内存空间语句
btroot->data=ctroot->data;//树的根节点作为二叉树的根节点
btroot->lchild=btroot->rchild=NULL;
addQueueCTree(VisitedCTreeNodes,ctroot);//树的跟节点入队
addQueueBTree(VisitedBTreeNodes,btroot);//二叉树的跟节点入队
while(!QueueCTreeEmpty(VisitedCTreeNodes))
{
ctnode=delQueueCTree(VisitedCTreeNodes);//树节点出队
btnode=delQueueBTree(VisitedBTreeNodes);//二叉树节点出队
for(i=0;i<DEGREE;i++)//访问节点所有的孩子节点
{
if(ctnode->children[i]==NULL)//孩子节点访问完毕
break;
p=(BTreeNode *)malloc(sizeof(BTreeNode));//分配二叉树节点
p->data=ctnode->children[i]->data;
p->lchild=p->rchild=NULL;
if(i==0)
btnode->lchild=p;//长子,作为父节点的做孩子
else
LastSibling->rchild=p;//作为上一个兄弟节点的右孩子
LastSibling=p;
addQueueCTree(VisitedCTreeNodes,ctnode->children[i]);//树节点进队列
addQueueBTree(VisitedBTreeNodes,p);//二叉树节点进门队列
}
}
}
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@二叉树的遍历@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
void Preorder(BTreeNode *T)
{
if(T)
{
printf("%2c",T->data);
Preorder(T->lchild);
Preorder(T->rchild);
}
}
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@主函数调用@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
int main()
{
CTreeNode *Tree;
BTreeNode *BTree;
printf("创建一棵树
");
Tree=CreateSTree();
printf("树的先序遍历结果为:");
preorderTree(Tree);
printf("
");
TreeToBTree(Tree,BTree);
printf("转换后的二叉树,先序遍历的结果为:");
Preorder(BTree);
printf("
");
return 0;
}
树是一种重要的非线性数据结构,直观地看,它是数据元素(在树中称为结点)按分支关系组织起来的结构,很象自然界中的树那样。树结构在客观世界中广泛存在,如人类社会的族谱和各种社会组织机构都可用树形象表示。树在计算机领域中也得到广泛应用,如在编译源程序如下时,可用树表示源源程序如下的语法结构。又如在数据库系统中,树型结构也是信息的重要组织形式之一。一切具有层次关系的问题都可用树来描述。
一、树的概述
树结构的特点是:它的每一个结点都可以有不止一个直接后继,除根结点外的所有结点都有且只有一个直接前趋。以下具体地给出树的定义及树的数据结构表示。
(一)树的定义
树是由一个或多个结点组成的有限集合,其中:
⒈必有一个特定的称为根(ROOT)的结点;
⒉剩下的结点被分成n>=0个互不相交的集合T1、T2、......Tn,而且, 这些集合的每一个又都是树。树T1、T2、......Tn被称作根的子树(Subtree)。
树的递归定义如下:(1)至少有一个结点(称为根)(2)其它是互不相交的子树
1.树的度——也即是宽度,简单地说,就是结点的分支数。以组成该树各结点中最大的度作为该树的度,如上图的树,其度为3;树中度为零的结点称为叶结点或终端结点。树中度不为零的结点称为分枝结点或非终端结点。除根结点外的分枝结点统称为内部结点。
2.树的深度——组成该树各结点的最大层次,如上图,其深度为4;
3.森林——指若干棵互不相交的树的集合,如上图,去掉根结点A,其原来的二棵子树T1、T2、T3的集合就为森林;
4.有序树——指树中同层结点从左到右有次序排列,它们之间的次序不能互换,这样的树称为有序树,否则称为无序树。
5.树的表示
树的表示方法有许多,常用的方法是用括号:先将根结点放入一对圆括号中,然后把它的子树由左至右的顺序放入括号中,而对子树也采用同样的方法处理;同层子树与它的根结点用圆括号括起来,同层子树之间用逗号隔开,最后用闭括号括起来。如上图可写成如下形式:
(A(B(E(K,L),F),C(G),D(H(M),I,J)))
5. 2 二叉树
1.二叉树的基本形态:
二叉树也是递归定义的,其结点有左右子树之分,逻辑上二叉树有五种基本形态:
(1)空二叉树——(a);
(2)只有一个根结点的二叉树——(b);
(3)右子树为空的二叉树——(c);
(4)左子树为空的二叉树——(d);
(5)完全二叉树——(e)
注意:尽管二叉树与树有许多相似之处,但二叉树不是树的特殊情形。
2.两个重要的概念:
(1)完全二叉树——只有最下面的两层结点度小于2,并且最下面一层的结点都集中在该层最左边的若干位置的二叉树;
(2)满二叉树——除了叶结点外每一个结点都有左右子女且叶结点都处在最底层的二叉树,。
3.二叉树的性质
(1) 在二叉树中,第i层的结点总数不超过2^(i-1);
(2) 深度为h的二叉树最多有2^h-1个结点(h>=1),最少有h个结点;
(3) 对于任意一棵二叉树,如果其叶结点数为N0,而度数为2的结点总数为N2,
则N0=N2+1;
(4) 具有n个结点的完全二叉树的深度为int(log2n)+1
(5)有N个结点的完全二叉树各结点如果用顺序方式存储,则结点之间有如下关系:
若I为结点编号则 如果I<>1,则其父结点的编号为I/2;
如果2*I<=N,则其左儿子(即左子树的根结点)的编号为2*I;若2*I>N,则无左儿子;
如果2*I+1<=N,则其右儿子的结点编号为2*I+1;若2*I+1>N,则无右儿子。
4.二叉树的存储结构:
(1)顺序存储方式
type node=record
data:datatype
l,r:integer;
end;
var tr:array[1..n] of node;
(2)链表存储方式,如:
type btree=^node;
node=record
data:datatye;
lchild,rchild:btree;
end;
5.普通树转换成二叉树:凡是兄弟就用线连起来,然后去掉父亲到儿子的连线,只留下父母到其第一个子女的连线。
二叉树很象一株倒悬着的树,从树根到大分枝、小分枝、直到叶子把数据联系起来,这种数据结构就叫做树结构,简称树。树中每个分叉点称为结点,起始结点称为树根,任意两个结点间的连接关系称为树枝,结点下面不再有分枝称为树叶。结点的前趋结点称为该结点的"双亲",结点的后趋结点称为该结点的"子女"或"孩子",同一结点的"子女"之间互称"兄弟"。
二叉树:二叉树是一种十分重要的树型结构。它的特点是,树中的每个结点最多只有两棵子树,即树中任何结点的度数不得大于2。二叉树的子树有左右之分,而且,子树的左右次序是重要的,即使在只有一棵子树的情况下,也应分清是左子树还是右子树。定义:二叉树是结点的有限集合,这个集合或是空的,或是由一个根结点和两棵互不相交的称之为左子树和右子树的二叉树组成。
(三)完全二叉树
对满二叉树,从第一层的结点(即根)开始,由下而上,由左及右,按顺序结点编号,便得到满二叉树的一个顺序表示。据此编号,完全二叉树定义如下:一棵具有n个结点,深度为K的二叉树,当且仅当所有结点对应于深度为K的满二叉树中编号由1至n的那些结点时,该二叉树便是完全二叉树。图4是一棵完全二叉树。
三、二叉树的遍历
遍历是对树的一种最基本的运算,所谓遍历二叉树,就是按一定的规则和顺序走遍二叉树的所有结点,使每一个结点都被访问一次,而且只被访问一次。由于二叉树是非线性结构,因此,树的遍历实质上是将二叉树的各个结点转换成为一个线性序列来表示。
设L、D、R分别表示遍历左子树、访问根结点和遍历右子树, 则对一棵二叉树的遍历有三种情况:DLR(称为先根次序遍历),LDR(称为中根次序遍历),LRD (称为后根次序遍历)。
(1)先序遍历
访问根;按先序遍历左子树;按先序遍历右子树
(2)中序遍历
按中序遍历左子树;访问根;按中序遍历右子树
(3)后序遍历
按后序遍历左子树;按后序遍历右子树;访问根
从概念上讲,树、森林和二叉树是三种不同的数据结构,将树、森林转化为...
高分!关于数据结构树,树林,二叉树! 1 2009-06-15 树和森林生成二叉树算法(请给出数据结构) 1 2012-06-28 森林转换成二叉树 19 2011-04-19 关于数据结构二叉树的基本概念问题 1 更多类似问题 > 二叉树的相关知识2011-05-13 二叉树,数据结构。。。 1 2009-04-10 树与二叉树的转换 3 2011-03-...
数据结构中树的孩子表示法与二叉树的链表是什么关系
假设我的家谱是这样的:转换成孩子兄弟表示法后是这样的:我们要做的是:这时我们要找有多少代人,以及最后以一代人出来。如果根据第一个图来说找代数就是树的高度,最后一代人就是树的最后一层,二叉链表法中却不如第一个图来的直观,但是只要把握二叉链表法的本质还是很清晰的,根据孩子兄弟表示法...
树和二叉树的运行与操作
创建,遍历,转化,复制,删除等。遍历:前中后三种顺序的遍历,已经是各数据结构与算法教程的最基础内容,在此不重复。创建:大多数据结构教程当中的二叉树创建程序,都是采用的递归方式,递归方式创建的二叉树与遍历的过程相似,所创建的二叉树,也是采用左右子节点方式,后续进行遍历操作十分方便。转化:...
数据结构: B-Tree 简介及插入
通过不断插入600、700、800、900等值,观察树的生长过程,可以清晰地看到分裂过程。当根节点满时,继续插入键值会导致根节点分裂,树结构向上扩展。通过插入过程,我们可以直观理解B树与二叉树的区别。B树的节点从下往上生长,而二叉树的节点从上往下生长。特性2与特性5则解释了节点数量与子节点数量的关系...
计算机中的树是什么
树:数据结构名词。1、树状图是一种数据结构,它是由n(n>=1)个有限结点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。2、它具有以下的特点,每个结点有零个或多个子结点;没有父结点的结点称为根结点;每一个非根结点有且...
为什么说二叉树不是树的特殊情况求大神帮助
尽管树和二叉树的概念之间有许多的类似,但它们是两个不同的数据结构。因为从定义来看,二叉树既不是只有两个子树的树,也不是最多只有两个子树的树、 树和二叉树最主要的区别是:二叉树中结点的子树要区分左子树和右字树,即使在结点只有一棵子树的情况下也要明确指出该子树是左子树还是右子树 ...
二叉树可以为空 但树不能为空 为什么??
首先树是图的一种特殊情形,图是不允许为空的,故而树是不能为空的,至少应该有一个结点;而BinaryTree并不是树,它与树并不是包含的关系。它的定义就是可以为空。参见维基百科!
数据结构——树和森林的遍历方法
2、中序遍历 中序遍历的定义为: (1)中序遍历第一棵树的根结点的子树; (2)访问森林中第一棵树的根结点; (3)中序遍历去掉第一棵树后的子森林。森林与二叉树的转换 树转化为二叉树: ⑴ 加虚线(或者粗实线)。在树的每层按从“左至右”的顺序在兄弟结点之间加虚线相...
数据结构中的有序树和无序树是什意思?它们有什么区别
有序树:树中任意节点的 子结点之间有顺序关系,这种树称为有序树。无序树:树中任意节点的 子结点之间没有顺序关系,这种树称为无序树,也称为自由树。二叉树、有序树:左右有序 二叉树与有序树:在只有一棵树的情况下,二叉树有左右之分、有序树无左右之分 另外:二叉树是有序的,可以为空...
数据结构(二):二叉搜索树(Binary Search Tree)
既然线性结构能够做到查询复杂度为 级别,那二叉搜索树产生又有何必要呢?毕竟二叉搜索树的查询复杂度只是介于 ~ 之间,并不存在查询优势。二叉搜索树是一种节点值之间具有一定数量级次序的二叉树,对于树中每个节点:示例:观察二叉搜索树结构可知,查询每个节点需要的比较次数为节点深度加一。如深...
五胥吡拉: 那个叫二叉树啊 树是一种重要的非线性数据结构,直观地看,它是数据元素(在树中称为结点)按分支关系组织起来的结构,很象自然界中的树那样.树结构在客观世界中广泛存在,如人类社会的族谱和各种社会组织机构都可用树形象表示....
思南县19339042105: 求数据结构树转换为二叉树的C语言代码,一定要能在code blocks上运行的!!!!!! - ?
五胥吡拉: #include #include using namespace std; struct Node { int key, heap, tot; Node *left, *right; } *root; int getT(Node *root) { if (root == NULL) return 0; return root->tot; } void Update(Node *root) { if (root == NULL) return; root->tot = getT(root->left) + getT(...
思南县19339042105: 求数据结构(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 ...
思南县19339042105: [求C++代码] 树与二叉树之间的转换. - ?
五胥吡拉: void Trans_To_Binary(){int i,j;for(i=0;i<n;i++){for(j=0;j<son[i].size();j++){if(pos[i]==-1){tree[i].l = son[i][j];pos[i]=son[i][j];}else{tree[pos[i]].r=son[i][j];}}} } 大概这么个东西...pos为-1表示这个东西没有儿子,来个儿子放左边,否则放儿子的兄弟上...
思南县19339042105: 数据结构:广义表转二叉树(C语言) - ?
五胥吡拉: 可以输入#代表空,不过在广义表的建立时相应的要有 switch(当前字符)case'#':break;
思南县19339042105: 数据结构代码(用C语言) 二叉树的操作 - ?
五胥吡拉: # include struct BTNode { int data; struct BTNode * pLchild;//p是指针,L是左,child是孩子 struct BTNode * pRchild; };//函数声明 struct BTNode * CreateBTree(void);//创建树 void PreTraverseBTree(struct BTNode * pT);//先序遍历 void ...
思南县19339042105: 急急急:关于二叉树的算法 遍历 左右子树交换 用类C语言 要详细代码 - ?
五胥吡拉: (1)编写建立二叉树的算法. (2)验证二叉树的先序、中序、后序遍历算法 (3)编写二叉树的左右子树交换算法 上面这些都比较简单,程序如下:#include <stdio.h> #include <malloc.h>typedef struct tree {char data;struct tree *l;/*左儿子*/...
思南县19339042105: 求数据结构 二叉树的基本操作实现 c语言版 - ?
五胥吡拉: # include <stdio.h># include <malloc.h> struct BTNode { int data; struct BTNode * pLchild;//p是指针,L是左,child是孩子 struct BTNode * pRchild; };//函数声明 struct BTNode * CreateBTree(void);//创建树 void PreTraverseBTree(struct BTNode * ...
思南县19339042105: 求教建立一棵树,然后转换为二叉树的实现!用c! - ?
五胥吡拉: 打印新树有点问题,不知道什么原因... 用DEV-CPP调试的时候,能够完成转化... 默认1为根... 参考原理:http://zk.educity.cn/sjjg/200608301438351670.htm #include #include struct work1 { int no,num; int son[101]; }tree[101]; struct work2 { int l,r; }newtree[101]; int n; int init() /*读入一棵树*/ { int m,i,a,b; scanf("%d%d",&n,&m); /*读入节点数N,关系数M*/ for (i=1;i
思南县19339042105: 用c语言编程实现二叉树的建立和遍历二叉树? - ?
五胥吡拉: //这是我上数据结构写的 建议理解为主#include#include#define ERROR 0#define OK 1#define OVERFLOW -2#define FLASE 0#define TURE 1 typedef int Status; typedef char TElemType; typedef struct BiTNode{ TElemType data; struct BiTNode ...