IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 表达式由单字母变量和双目四则运算算符构成。现将一个表达式转换为逆波兰式(所有 操作符 置于 操作数 的后面,因此也被称为 后缀表示法 。)。 -> 正文阅读

[数据结构与算法]表达式由单字母变量和双目四则运算算符构成。现将一个表达式转换为逆波兰式(所有 操作符 置于 操作数 的后面,因此也被称为 后缀表示法 。)。

用二叉树遍历算法求该中缀表达式对应的后缀(逆波兰)表达式。

/*
表达式由单字母变量和双目四则运算算符构成。
现将一个表达式转换为逆波兰式(所有 操作符 置于 操作数 的后面,因此也被称为 后缀表示法 。)。 
*/

/*
建立合法的表达式字符串只含二元操作符的非空表达式数
用二叉树遍历算法求该中缀表达式对应的后缀(逆波兰)表达式
*/
 
#include "stdio.h"//包含 getchar() scanf() printf() 
#include "malloc.h"//malloc()动态申请空间 函数
//二叉树 结点 
struct node{
	char data;
	struct node *lchild,*rchild;
}bnode;
 
typedef struct node * blink;
 
//中缀 建立 二叉数 (这里 采用 括号 来识别 表达式 优先层级,最外层也需要加括号)
//递归实现
static int i = 0;//标记 数组中 下一个 要处理的 元素,静态变量 会继承上一次调用的值 
blink create_binary(char s[])
{
	
    char ch = s[i];//保存 本次 调用 要处理 的元素 
    
    //构建结点 
    blink bt;
	bt = (blink)malloc(sizeof(bnode));
    bt->data = '\0';
    bt->lchild = NULL;
    bt->rchild = NULL;
    
    //ch保存后,算作处理完毕 跳过 1中的左括号(不处理),或者跳过 2中的数据,无论那种 都得+1
    i ++; 
	
	//开始 真正处理 ch保存的元素 
    if(ch == '(')//如果ch保存的 元素 是'(' -----------1
    {	
    	bt->lchild = create_binary(s);//处理 操作符的左子树----左 
    	
		bt->data = s[i];//保存 操作符 为局部的 根 ----根 
    	i ++;//向后移动 处理下一个 元素 
    	
    	bt->rchild = create_binary(s);//处理 操作符的右子树---右 
		
		i ++;//处理完毕 跳过 结束的右括号(不处理) 
	}
	
	else//如果ch保存的 元素 是一个 值,直接赋值---------2 
	{
		bt->data = ch;
	} 
    
    /*   输入 ((4-5)*(1+2)) 
                        *
 					-      +
 				4      5  1   2
 	
				    	
    */
    return bt;
}
 
//后序遍历 
void postorder(blink bt)
{
	/*
	依照test_one
	*/
	
	if(bt != NULL)//中序 左根右 
	{
		postorder(bt->lchild); //左
		postorder(bt->rchild); //右
		printf("%c",bt->data);//根
	}
	
	return;
}
 
blink FreeTree(blink T)
{
	if(T)
	{
		FreeTree(T->lchild);            //递归释放其左子树 
		FreeTree(T->rchild);           //递归释放其右子树 
		
		free(T);                      //释放根节点 
		T = NULL;                     //释放指向根节点的指针 
	}
	
	return T;           //返回释放后的根节点NULL 
 
}
 
int main()
{
	blink root = NULL;//根 结点
	char s[50] = {'\0'};
	scanf("%s",s);//输入 中缀 表达式 
	//建树
	root = create_binary(s); 
	//遍历 
	printf("\n后序遍历 得到逆波兰式(后缀)\n");
	postorder(root);//后序 遍历 二叉树 
	
	printf("\n");
	free(FreeTree(root));//释放 空间
	 
	return 0;
}

?

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-11-29 16:33:23  更:2021-11-29 16:34:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 12:50:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码