學習了資料結構的第三章二叉樹後,實驗是用二叉樹來儲存表示式。
struct node
;class
binarytree
;
node* binarytree::
getroot()
binarytree::
binarytree()
void binarytree::
preorder
(node* bt)
}void binarytree::
inorder
(node* bt)
}void binarytree::
postorder
(node* bt)
}void binarytree::
destorytree
(node* bt)
然後是判斷字元是否是數字的函式和判斷運算子優先順序的函式。
bool
isnumber
(char ch)
bool
isprior
(char a,
char b)
要用二叉樹儲存表示式,首先需要將中綴表示式轉化為逆波蘭式,這裡只實現了簡單的功能,即數字只可以是0~9。
std::queue<
char
>
torpn
(char
* array)
stk.
pop();
//最後將(出棧
}else
} stk.
push
(array[i]);
//棧為空或當前運算子優先順序高時直接入棧,否則迴圈**棧}}
while
(!stk.
empty()
)return rpn;
}
將torpn返回的佇列轉化成二叉樹:
binarytree creattree
(std::queue<
char
> rpn)
nodestk.
push
(treearray[i]);
//所有迴圈後棧中只剩乙個結點
rpn.
pop();
} binarytree tree = nodestk.
top();
//將最後的結點作為根結點構造樹
nodestk.
pop();
return tree;
}
用二叉樹處理表示式
題目大意 類似a b c d e f 基本思路 遞迴建立表示式樹,優先順序高的在深層次,注意括號,注意結合性,左結合就找優先順序相同的當中在最右邊的 如下 int nc 0 int lch maxn rch maxn char op maxn int buildtree char s,int x,i...
棧 二叉樹 表示式 表示式樹 表示式求值
總時間限制 1000ms 記憶體限制 65535kb 描述 眾所周知,任何乙個表示式,都可以用一棵表示式樹來表示。例如,表示式a b c,可以表示為如下的表示式樹 a b c 現在,給你乙個中綴表示式,這個中綴表示式用變數來表示 不含數字 請你將這個中綴表示式用表示式二叉樹的形式輸出出來。輸入 輸入...
表示式求值 表示式轉二叉樹
1 後序表示式求值 後續表示式 逆波蘭式 的特點 沒有括號。求值方法 從前向後掃,遇到運算元壓棧 遇到操作符,從棧中取出2個運算元運算,結果壓棧。最終棧中所剩的數為結果。2 中序表示式求值 我們先來定義運算子的優先順序 從上到下依次公升高 準備2個棧,乙個專門存放運算子,另乙個專門存放運算元。1.遇...