数据结构 如何创建一棵树,请给出c语言详细代码,谢谢

数据结构 如何创建一棵树,请给出c语言详细代码,谢谢,第1张

刚刚回答了一个类似的问题,以下代码供参考:

#include "stdio.h"

#include "stdlib.h"

#define OK 1

#define ERROR 0

#define OVERFLOW -2

typedef char TElemType

typedef int Status

typedef struct BiTNode { // 结点结构

TElemType data

struct BiTNode *lchild, *rchild

// 左右孩子指针

} BiTNode, *BiTree

//以下是建立二叉树存储结构,空节点输入作为#结束标识

Status CreateBiTree(BiTree &T) {

//请将该算法补充完整,参见第6章课件算法或课本

char ch

scanf("%c",&ch)

if(ch=='#') T=NULL

else{

if(!(T=(BiTNode*)malloc(sizeof(BiTNode))))

exit(OVERFLOW)

T->data=ch

CreateBiTree(T->lchild)

CreateBiTree(T->rchild)

}

return OK

} // CreateBiTree

void Preorder(BiTree T)

{

if(T)

{

printf("%c",T->data)

Preorder(T->lchild)

Preorder(T->rchild)

}

}

void Inorder(BiTree T)

{ // 中序遍历二叉树

//请将该算法补充完整,参见第6章课件算法

if(T)

{

Inorder(T->lchild)

printf("%c",T->data)

Inorder(T->rchild)

}

}

void Postorder(BiTree T)

{ // 后序遍历二叉树

//请将该算法补充完整,参见第6章课件算法

if(T)

{

Postorder(T->lchild)

Postorder(T->rchild)

printf("%c",T->data)

}

}

//以下是求叶子结点数

void CountLeaf(BiTree T,int&count){

//请将该算法补充完整,参见第6章课件算法

if(T){

if((!T->lchild)&&(!T->rchild))

count++

CountLeaf(T->lchild,count)

CountLeaf(T->rchild,count)

}

}

//以下是求二叉树的深度

int Depth(BiTree T ){

//请将该算法补充完整,参见第6章课件算法

int depthval,depthLeft,depthRight

if(!T) depthval=0

else{

depthLeft = Depth(T->lchild)

depthRight = Depth(T->rchild)

if(depthLeft>depthRight)depthval = 1+depthLeft

else depthval = 1+depthRight

}

return depthval

}

void main(){

BiTree T

int s=0,d

printf("\n creat of the bitree:\n")

CreateBiTree(T)

printf("\n output result of Preorder:\n")

Preorder(T)

CountLeaf(T,s)

d=Depth(T)

printf("\n leaves=%d\n",s)

printf("\n depth=%d\n",d)

}

您好,想要实现一个二叉树,需要用到结构体来存储每个节点的信息,并使用指针来存储每个节点的左右子节点的地址。具体的实现方法可以参考下面的代码示例:

#include <stdio.h>

#include <stdlib.h>

struct TreeNode {

int val

struct TreeNode *left

struct TreeNode *right

}

struct TreeNode* createNode(int val) {

struct TreeNode* node = (struct TreeNode*) malloc(sizeof(struct TreeNode))

node->val = val

node->left = NULL

node->right = NULL

return node

}

void insertNode(struct TreeNode* root, int val) {

if (root == NULL) {

return

}

if (val <root->val) {

if (root->left == NULL) {

root->left = createNode(val)

} else {

insertNode(root->left, val)

}

} else {

if (root->right == NULL) {

root->right = createNode(val)

} else {

insertNode(root->right, val)

}

}

}

void printTree(struct TreeNode* root) {

if (root == NULL) {

return

}

printf("%d\n", root->val)

printTree(root->left)

printTree(root->right)

}

int main() {

struct TreeNode* root = createNode(5)

insertNode(root, 3)

insertNode(root, 2)

insertNode(root, 4)

insertNode(root, 7)

insertNode(root, 6)

insertNode(root, 8)

printTree(root)

return 0

}

在这段代码中,我们定义了一个结构体 TreeNode 来表示二叉树的每个节点,结构体中包含了一个节点的数值 val,以及指向左子节点和右子节点的指针 left 和 right。

树和图是两种常见的数据结构,在计算机技术应用十分广泛,他们也是两种思考问题的方式,常用于结局实际问题。树最直观的用途就是如人类社会的族谱和各种社会组织机构都可用树形象表示。树在计算机领域中也得到广泛应用,如在编译源程序如下时,可用树表示源源程序如下的语法结构。在数据库系统中,树型结构也是信息的重要组织形式之一,一切具有层次关系的问题都可用树来描述。数据结构的图就是实际情况的抽象,即逻辑模型,然后通过计算机编程来解决问题。比如一个很复杂的地图,有很多城市,有很多路,如何找出最短路径呢?当然是用计算机来算了,你就得用图来表示等等,很多用途,如果你学习数学建模,你会经常遇到他们的好好学吧


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11495964.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存