C语言二叉树创建与先序遍历代码解析

这段代码实现了二叉树的创建和先序遍历功能,并通过详细的代码注释和讲解,帮助你深入理解二叉树的构建和遍历过程。

#include<stdio.h>
#include<stdlib.h>

typedef char elem;
typedef struct node
{
elem data;
struct node *lchild;
struct node *rchild;
}BTnode;

void preorder(BTnode *&b)
{
if(b!=NULL)
{
printf("%c",b->data);
preorder(b->lchild) ;
preorder(b->rchild) ;
}
}

void createbtree( BTnode *&b,char *str)
{
int maxsize=10;
BTnode *sto[maxsize],*p;
int top = -1,k,j=0;
b=NULL;
char ch;
ch=str[j];
while(str[j]!='\0')
{
switch(ch)
{
case '(' : top++; sto[top]=p;k=1;break;
case ',' : k=2;break;
case ')' : top--;break;
default : p=(BTnode *)malloc(sizeof(BTnode));
p->data=ch;
p->lchild=p->rchild=NULL;
if(b==NULL)
b=p;
else
{
switch(k)
{
case 1 : sto[top]->lchild=p;break;
case 2 : sto[top]->rchild=p;break;
}
}
j++;
ch=str[j];
}
}
}

int main()
{
int maxsize,i=0;
BTnode *t = NULL; // 初始化t指针
char string[] = "x(a(b(c(z,y),d),d))" ;
while(string[i]!='\0')
if(string[i]=='(')
i++;
maxsize=i;
printf("%d\n",maxsize);
createbtree(t,string);
preorder(t);
return 0;
}

代码解释:

  1. 数据结构定义:

    • BTnode 结构体定义了一个二叉树节点,包含数据域 data 和左右子树指针 lchildrchild
  2. 先序遍历函数 preorder

    • 函数递归地访问二叉树,按照根节点 -> 左子树 -> 右子树的顺序输出节点数据。
  3. 创建二叉树函数 createbtree

    • 函数通过输入一个字符串,根据字符串的结构创建二叉树。
    • 字符串的格式:x(a(b(c(z,y),d),d)),其中 x 是根节点,括号内的元素代表左右子树,逗号分隔左右子树的节点。
    • 函数使用栈来记录节点的父节点,并根据输入字符串创建节点并链接它们,最终形成一棵二叉树。
  4. 主函数 main

    • 初始化一个字符串 string,代表要创建的二叉树。
    • 初始化一个 BTnode 指针 t ,用来指向二叉树的根节点。
    • 调用 createbtree 函数创建二叉树。
    • 调用 preorder 函数进行先序遍历。

代码中存在的错误:

  • main 函数中,BTnode *t; 只声明了 t 指针,但没有初始化。在调用 createbtree 函数时,传入的是一个未初始化的指针,会导致程序错误。

解决方案:

  • main 函数中将 BTnode *t; 改为 BTnode *t = NULL; ,将 t 初始化为 NULL 指针,以避免错误。

总结:

这段代码演示了如何使用 C 语言创建二叉树并进行先序遍历,通过详细的代码注释和讲解,你可以更好地理解二叉树的基本操作。如果你对二叉树还有其他问题,请随时提问。

建议:

  • 为了更好地理解代码,可以尝试将代码中的字符串替换为其他不同的二叉树结构,观察代码的运行结果。
  • 可以尝试将先序遍历改为中序遍历或后序遍历,并修改代码以实现相应的遍历功能。
  • 可以尝试在代码中加入调试语句,比如在 preorder 函数中加入 printf 语句来检查程序的执行情况,帮助定位问题所在。

希望这份解析对你的学习有所帮助!

C语言二叉树创建与先序遍历代码解析 - 深入理解代码逻辑

原文地址: https://www.cveoy.top/t/topic/p3NK 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录