二叉樹計算以結構體數組元素爲變量的表達式

有如下結構體的數據

typedef struct tagdata
{
 double a;
 double b;
 double c;
 double d;
}data;

有數組數據

data x[1000];

有公式

y = (x.a + x.b + x.c + x.d + 100) / 4

其中數據對應關係爲

y[n] = (x[n - 1].a + x[n - 2].b + x[n].c + x[n].d + 100) / 4 (n >= 2)

現在通過構造表達式二叉樹完成計算。

定義二叉樹節點結構體

typedef struct tagbintree  
{  
 char op;
 char level;
 double fvalue;
 int structindex; /* 用於在計算中識別結構體成員 */
 struct tagbintree *lchild;
 struct tagbintree *rchild;
}bintree;

添加一個函數 preoffset 處理表達式中數據的座標變化

double preoffset(data *p, int offset, int structindex)
{
 if (structindex == 1)
  return (p - offset)->a;
 if (structindex == 2)
  return (p - offset)->b;
 if (structindex == 3)
  return (p - offset)->c;
 return (p - offset)->d;
}

現在將要計算的表達式做一下變換

y = (preoffset(a, 1) + preoffset(b, 2) + c + d + 100) / 4 

原有的計算節點值的函數 double caltree(const bintree *node) 修改成爲double caltree(const bintree *node, data *p) ,通過參數p引入數據數組x,完成計算。

表達式樹的構造過程沒有多大變化,只要將表達式中變量識別之後記錄在節點中,最後計算時通過循環以表達式樹計算數組x每個元素將結果放進數組y當中。

可以以此來實現由數據繪製函數圖像的功能。

在原有的程序基礎上做修改很容易的,完整代碼就不再寫了。

發佈了29 篇原創文章 · 獲贊 0 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章