您好,想要实现一个二叉树,需要用到结构体来存储每个节点的信息,并使用指针来存储每个节点的左右子节点的地址。具体的实现方法可以参考下面的代码示例:
#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!
顺便发一份给你,注意接收!