二叉树:广义表搭建二叉树

本文介绍了如何从广义表如A(B(D),C)构建二叉树,并提供了算法思路和代码实现。在构建过程中,通过读取字符并根据括号和逗号创建节点,完成二叉树的构建。此外,还讲解了二叉树的层序遍历方法,利用动态数组模拟队列进行节点的访问。文章特别强调了malloc分配内存后,需要对指针指向的内容进行初始化,避免未定义行为。" 126956362,15450230,企业FAQ站点搭建:案例分析与实用技巧,"['运维', '网站设计', '客户服务', '用户体验', '知识库']
摘要由CSDN通过智能技术生成

使用广义表搭建二叉树(及层序遍历)

问题概要

二叉树是非常常见的数据结构,那么,如何从无到有构建一棵二叉树呢?比较主流的方法就是输入一个广义表,例如A(B(D),C),这种形式。那么,如何把这种字符串转变为对应的,用指针相连的二叉树,这个问题很常见,故记录如下。(这里假定树的节点内容均为大写英文字符。)

算法思路

首先,为了建立树,必须建一个根节点。
为了在这棵树上运动,建立一个指针,指向当前操作的节点,命名为curr,初始时指向根节点。
下面开始逐字符读入广义表。
当读入的字符为大写英文字符时,显然,此时对当前节点进行赋值操作;
当读入的字符为左括号时,应当建立当前节点的左孩子,同时,为统一赋值操作,应当把当前的curr指针指向新建的左孩子;
当读入的字符为逗号时,应当建立当前节点的兄弟节点(右兄弟)。也就是说,先把当前的curr指针指向它的父亲,然后对于这个父亲,建立右孩子,在把curr指针指向这个右孩子;
当读入的字符为右括号时,说明右孩子已经操作完毕(可能赋值,也可能没有赋值),令curr指针指向其父即可;
当读入的字符为/n时,结束输入,二叉树建立完毕。

代码

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

struct treenode {
   
 struct treenode* parent ;
 struct treenode* lchild ;
 struct treenode* rchild ;
 char data;
};

int main()
{
   
 struct treenode* root = (struct treenode*)malloc(sizeof(struct treenode)
  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值