算術式ツリーの作成方法を理解する必要があります。
一連の数値だけを使用して単純な二分木を作成できます。以下にコード例を示します。
これは私のツリーの単純なノードです。
typedef struct _node {
int key;
struct _node *left, *right;
} node;
これは、バイナリ ツリーに新しいノードを追加する方法です。
node* add_tree(node *root, int val) {
if(NULL == root) {
root = crnode(val);
}
if (val < root->key) {
if (NULL == root->left) {
root->left = crnode(val);
}
else {
add_tree(root->left, val);
}
}
if (val > root->key) {
if (NULL == root->right) {
root->right = crnode(val);
}
else {
add_tree(root->right, val);
}
}
return root;
}
これは主な機能であり、ツリーに新しい番号を追加する方法を示しています。
int main(int argc, const char * argv[])
{
node *tree = add_tree(NULL, 5);
tree = add_tree(tree, 6);
tree = add_tree(tree, 7);
tree = add_tree(tree, 3);
return 0;
}
私の質問は、数値だけでなく演算子 (+ - / * など) を使用してこのコードを変換する方法です。
たとえば、式 5 * (10 - 5) + 6 * 4 をツリーに変換する必要があります。どうすれば作れますか?