//广义表转二叉树:
设置一个标记变量k,初始值为-1;
设置一个标记结点p;
循环遍历广义表的字符串str;
    如果str[i]是左括号:
        则设置k为0;
        把p压入栈中。
    否则如果str[i]是逗号:
        则设置k为1。
    否则如果str[i]是右括号:
        则栈顶元素出栈。
    否则如果str[i]是一个字母,用结点temp来存储:
        如果k为-1:
            则把temp作为根结点并压入栈中。
        如果k为0:
            如果此时栈顶结点是p,则先出栈;
            然后将temp作为栈顶结点的左孩子;
            再把temp压入栈中。
        如果k为1:
            栈顶元素出栈;
            将temp作为栈顶结点的右孩子;

再把temp压入栈中。

struct Node{char data;Node *lchild=NULL,*rchild=NULL;
};typedef struct Node node;node* build(const string &str){node *root = NULL;unsigned long max_length=str.length();int k=-1;int top=-1;node *p;node *temp;node* Stack[max_length];for(int i=0;i<max_length;i++){if(str[i]=='('){k=0;top++;Stack[top]=p;}else if(str[i]==','){k=1;}else if(str[i]==')'){top--;}else if(isalpha(str[i])){temp=new node;temp->data=str[i];if(k==-1){root=temp;top++;Stack[top]=temp;}else if(k==0){if(Stack[top]==p){  //这个if语句只是为了代码的可读性,可以不写top--;}Stack[top]->lchild=temp;top++;Stack[top]=temp;}else if(k==1){top--;Stack[top]->rchild=temp;top++;Stack[top]=temp;}}}return root;
}

//二叉树转广义表
输出结点存储的值;
如果左孩子不为空:
    输出"(";
    递归输出左子树;
    如果右子树为空:
        输出",)" 。
如果右孩子不为空:
    如果左孩子为空:
        输出"("。
    输出",";
    递归输出右子树;
    输出")"。

void print_list(node* cur_node){cout<<cur_node->data;if(cur_node->lchild!=NULL){cout<<"(";print_list(cur_node->lchild);if(cur_node->rchild==NULL){cout<<",)";    //可为cout<<")"}}if(cur_node->rchild!=NULL){if(cur_node->lchild==NULL){cout<<"(";}cout<<",";print_list(cur_node->rchild);cout<<")";}
}

广义表和二叉树的转换相关推荐

  1. java 广义表_java 输入广义表 生成二叉树 | 学步园

    今天我要分享我学习用广义表生成二叉树的代码 这里我参考了  张二青博主的一些知识 http://my.csdn.net/zhangerqing 下面我进行分析了  比如输入广义表  (有关字符串的定义 ...

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

    使用广义表搭建二叉树(及层序遍历) 问题概要 二叉树是非常常见的数据结构,那么,如何从无到有构建一棵二叉树呢?比较主流的方法就是输入一个广义表,例如A(B(D),C),这种形式.那么,如何把这种字符串 ...

  3. 按广义表表示二叉树结构生成二叉树链表的算法

    用广义表表示二叉树结构如下: (A (B (,D (E,E),C)) 算法如下: #include <stdio.h> #include <stdlib.h>// 定义节点 t ...

  4. 广义表与二叉树之间的相互转换

    广义表与二叉树之间的相互转换 二叉树是树形结构中一种特殊的树,其特点是每个结点最多只有两个孩子结点.二叉树除了可以通过典型的树状图来表示外,还可以使用广义表进行表示,例如:A(B,C)表示根结点A的左 ...

  5. 广义表之树的兄弟孩子表示法

    title: 广义表之树的兄弟孩子表示法 date: 2020-11-17 15:55:55 tags: 兄弟孩子广义表 二叉树 categories: 数据结构 用兄弟孩子广义表来表示二叉树 对比 ...

  6. 数据结构之【数组和广义表】复习题

                          第 4  章  数组和广义表 一.选择题 1. 将一个A[1..100,1..100]的三对角矩阵,按行优先存入一维数组B[1‥298]中,A中元素A666 ...

  7. 数组和广义表 - [数据结构]

    2005-09-07 数组和广义表 - [数据结构] 第五章 数组和广义表 --非线性数据结构 5.1 数组的定义和运算 ☆二维数组的逻辑结构形式定义为: 2_Array=( D, R ) 其中 D= ...

  8. 【课上笔记】第五章 数组和广义表

    数组和广义表 5.1多维数组 5.1.1数组的逻辑结构 数组是我们熟悉的一种数据结构,可以看作线性表的推广. 数组作为一种数据结构其特点是结构中的元素本身可以是具有某种结构的数据,但属于同一类型.比如 ...

  9. 双亲表示法、孩子表示法、孩子兄弟表示法(二叉树表示法),森林和二叉树的转换

    树的存储结构 一.双亲表示法 二.孩子表示法(孩子链表) 三.孩子兄弟表示法(二叉树表示法.二叉链表表示法) 四.森林(树)和二叉树的转换 一.双亲表示法 实现:定义数组结构存放树的结点,每个结点含两 ...

最新文章

  1. 【CodeForces】961 F. k-substrings 字符串哈希+二分
  2. 采用邻接表存储结构,编写一个判别无向图中任意给定的两个顶点之间是否存在一条长度为k的简单路径的算法。
  3. Pytorch基础知识整理(六)参数初始化
  4. Apache Flink 在汽车之家的应用与实践
  5. 百度-Java中级面试题分享-
  6. CLin 和 IDEA创建文件时自动添加作者和时间信息 + 多个.cpp文件在CLion下运行问题...
  7. 前端程序员也需要知道进程和线程
  8. 计算机组成原理三个相关,计算机组成原理试题3
  9. 服务器pe安装win7系统安装教程,win7 winpe安装过程图文教程
  10. ASLD 高级固体激光器设计及仿真软件
  11. 要重复多少次变成潜意识_潜意识成功法则
  12. fontawesome-webfont.woff2 404
  13. Ubuntu 台式机 usb WiFi 接收器设置方法
  14. 微机接口-8086CPU
  15. 3.5 基本属性测试
  16. python发邮件,添加附件
  17. 功能室计算机室教学计划,计算机室教学计划
  18. 怎么下载QQ空间或者知乎类似网站上面的视频文件
  19. GoLang之使用sync.pool和sync.cond
  20. 写给零基础小白看的入门级 Java 基本语法,强烈推荐

热门文章

  1. kernel 启动过程之三, start_kernel()函数 概叙!init/main.c
  2. IDEA选中一列数据
  3. unity:灯光效果(诠释)
  4. 偏微分方程 基础知识(线性偏微分方程+常系数线性偏微分方程) | 偏微分方程(一)
  5. JAVA编程_05_超市奖票兑换
  6. 7-5 超市奖票兑换 (10 分)
  7. 网传鸿蒙系统测试版pS,鸿蒙系统测试版3.0-鸿蒙系统app测试版3.0安卓v3.0下载-pszxw下载站...
  8. 有哪样 BI 产品能支持数据填报补录功能?
  9. 最难忘的新年祝福,第一个让大家都惊喜的小程序(有趣、恶搞、好玩)
  10. 【深入理解TcaplusDB技术】TcaplusDB机器如何初始化和上架