!用二叉樹來表示代數運算式

來源:互聯網
上載者:User

/*exp7-7.cpp*/
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#define MaxSize 100
typedef char ElemType;
typedef struct node
{
 ElemType data;/*資料元素*/
 struct node *lchild;/*指向左孩子*/
 struct node *rchild;/*指向右孩子*/
}BTNode;

 extern void DispBTNode(BTNode *b);/*在algo7-1.cpp檔案中*/

 BTNode *CRTree(char s[],int i,int j)
 {
  BTNode *p;
  int k,plus=0,posi;
  if(i==j)
  {
   p=(BTNode *)malloc(sizeof(BTNode));
   p->data=s[i];
   p->lchild=NULL;
   p->rchild=NULL;
   return p;
  }
  /*i!=j的情況*/
  for(k=i;k<=j;k++)
   if(s[k]=='+' || s[k]=='-')
  {
   plus++;
   posi=k;/*最後一個+或-的位置*/
   }

    if(plus==0)/*沒有+或-的情況*/
   for(k=i;k<=j;k++)
    if(s[k]=='*' || s[k]=='/')
    {
     plus++;
     posi=k;
    }
 else/*plus!=0*/
 {
  p=(BTNode *)malloc(sizeof(BTNode));
  p->data=s[posi];
  p->lchild=CRTree(s,i,posi-1);
  p->rchild=CRTree(s,posi+1,j);
  return p;
 }
 }

 void main()
 {
  BTNode *b;
  char s[MaxSize]="a+b*c-e/f";
  printf("\n");
  printf("代數運算式%s\n",s);
  b=CRTree(s,0,strlen(s)-1);
  printf("對應二叉樹:");
  DispBTNode(b);
  printf("\n\n");
 }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.