zoukankan      html  css  js  c++  java
  • 二叉树与运算符

    1)二叉树仅含二元运算符,存储在二叉树BT中,写出计算该算术表达式的值的算法。

    #include "stdafx.h"
    #include<iostream>
    using namespace std;
    typedef struct BTreeNode
    {
    	float data;
    	char optr;
    	struct BTreeNode *lchild,*rchild;
    }BiNode,*BTree;
    int _tmain(int argc, _TCHAR* argv[])
    {
    	return 0;
    }
    float PostEval(BTree bt)//后序遍历
    {
    	float lv,rv;//左右表达式的值;
    	float value;//最终值
    	if(bt)
    	{
    		lv=PostEval(bt->lchild);
    		rv=PostEval(bt->rchild);
    		switch(bt->optr)
    		{
    		case '+':value=lv+rv;break;
    		case '-':value=lv-rv;break;
    		case '*':value=lv*rv;break;
    		case '/':value=lv/rv;break;
    		}
    	}
    	return value;
    }
    

     2)给出算法将二叉树表示的表达式二叉树按中缀表达式输出,并加上相应的括号

    #include "stdafx.h"
    #include<iostream>
    using namespace std;
    typedef struct BTreeNode
    {
    	float data;
    	char optr;
    	struct BTreeNode *lchild,*rchild;
    }BTree;
    int _tmain(int argc, _TCHAR* argv[])
    {
    	return 0;
    }
    int Precede(char optr1,char optr2)//比较运算符级别高低,optr1高于optr2时返回1,相等时返回0,低于时返回-1
    {
    	switch(optr1)
    	{
    	case '+':case'-':if(optr1=='+'||optr2=='-')return 0;else return -1;
        case '*':case'/':if(optr1=='*'||optr2=='/')return 0;else return 1;
    	}
    }
    void InorderExp(BTree *bt)//输出二叉树的表达式
    {
    	float lv,rv;//左右表达式的值;
    	float value;//最终值
    	int bracket;
    	if(bt)
    	{
    		if(bt->lchild)
    		{
    			bracket=Precede(bt->data,bt->lchild->data);//比较双亲与左子女运算符优先级
    			if(bracket==1)cout<<'(';
    			InorderExp(bt->lchild);//输出左子女的算术表达式
    			if(bracket==1)cout<<')';
    		}
    		cout<<bt->data;//输出根结点
    		if(bt->rchild)
    		{
    			bracket=Precede(bt->data,bt->rchild->data);//比较双亲与右子女运算符优先级
    			if(bracket==1)cout<<'(';
    			InorderExp(bt->rchild);//输出右子女的算术表达式
    			if(bracket==1)cout<<')';
    		}		
    	}
    }
    
  • 相关阅读:
    11.2---字符串数组排序,删除变位词(CC150)
    9.10---堆箱子问题(CC150)
    9.9---n皇后问题(CC150)
    11.1---有序数组合并(CC150)
    9.8---硬币问题(CC150)
    7.7---找只含3,5,7的数(CC150)
    17.1---编写一个函数交换两个变量的值(CC150)
    7.6--找过点最多的直线(CC150)
    7.5---两个正方形分成对半的直线(CC150)
    9.5---括号是否有效(CC150)
  • 原文地址:https://www.cnblogs.com/tgkx1054/p/2622294.html
Copyright © 2011-2022 走看看