数据结构二叉树的程序,用c语言怎么实现?

Python017

数据结构二叉树的程序,用c语言怎么实现?,第1张

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

#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。

只要将一个二叉树用“括号表示法”表示出来,然后,用链式存储结构将其各个结点存储就可以了,也就是输入一个二叉树。最后,用中序遍历输出!

typedef struct node

{ ElemType data

struct node *lchild,*rchild

} BTNode

//创建一个二叉树;

void CreateBTNode(BTNode * &b,char *str)

{ BTNode *St[MaxSize],*p=NULL

int top=-1,k,j=0

char ch

b=NULL //建立的二叉树初始时为空

ch=str[j]

while (ch!='\0') //str未扫描完时循环

{ switch(ch)

{

case '(':top++St[top]=pk=1break

//为左孩子结点

case ')':top--break

case ',':k=2break

//为孩子结点右结点

default:

p=(BTNode *)malloc(sizeof(BTNode))

p->data=chp->lchild=p->rchild=NULL

if (b==NULL) ///p为二叉树的根结点

b=p

else //已建立二叉树根结点

{ switch(k)

{

case 1:St[top]->lchild=pbreak

case 2:St[top]->rchild=pbreak

}

}

}

j++ch=str[j]

}

}

//中序遍历输出;

void InOrder(BTNode *b)

{ if (b!=NULL)

{ InOrder(b->lchild)

printf("%c ",b->data)//访问根结点

InOrder(b->rchild)

}

}

OK!

顺便发一份给你,注意接收!