在本教程中,我们将讨论将三元表达式转换为二叉树的程序。
为此,我们将提供一个三元表达式。我们的任务是根据可能的各种路径(选择),以二叉树的形式转换给定的表达式。
#include<bits/stdc++.h> using namespace std; //树的节点结构 struct Node { char data; Node *left, *right; }; //创建新节点 Node *newNode(char Data){ Node *new_node = new Node; new_node->data = Data; new_node->left = new_node->right = NULL; return new_node; } //将三元表达式转换为二叉树 Node *convertExpression(string str, int & i){ //存储当前字符 Node * root =newNode(str[i]); //如果是最后一个字符,则返回基本情况 if(i==str.length()-1) return root; i++; //如果下一个字符是“?”, //然后将有当前节点的子树 if(str[i]=='?'){ //跳过“?” i++; root->left = convertExpression(str,i); //跳过':'字符 i++; root->right = convertExpression(str,i); return root; } else return root; } //打印二叉树 void display_tree( Node *root){ if (!root) return ; cout << root->data <<" "; display_tree(root->left); display_tree(root->right); } int main(){ string expression = "a?b?c:d:e"; int i=0; Node *root = convertExpression(expression, i); display_tree(root) ; return 0; }
输出结果
a b c d e
我正在尝试将后缀表达式转换为二叉树。My函数将标记(字符串)列表作为参数。 每次我给函数任何输入时,调试器都会写一条消息:函数“add”中的非穷举模式。 我的想法是:一个接一个地读取标记,然后确定它是运算符还是操作数。如果是操作数,则不要将任何节点保存到树中,并将数字存储到堆栈中。否则,我用操作符创建一个节点,从堆栈中弹出符号,将它们设置为新节点的子节点,并将操作符推送到堆栈中。 如果字符串列表为
作为Java赋值的一部分,我必须获取输入算术表达式并将其存储在二叉树中。 我已经完成了赋值所需的一切,除了我在表达式的字符串中读取并将其存储在二叉树中的部分。 我创建了一个名为BinaryTree的类。它唯一的字段是一个称为根的树节点。此树节点在BinaryTree中定义为内部类。它有3个字段、一个通用数据字段和两个子字段(左和右),它们是BinaryTree类型。 我很难定义一个算法来读取像这样
我正在尝试执行以下操作(cb=CriteriaBuilder): 但我得到以下语法错误: 绑定不匹配:(表达式之间的泛型方法 是否可以转换表达式
我如何转换使用以下代码,我的二叉树到一个简单的链表。这也许可以用递归来完成。 因此,如果根为NULL,也就是,如果函数没有收到有效的指针,则返回错误消息。 如果根是叶,这是,如果左子节点和右子节点都为NULL,您必须将其添加到叶节点列表中。
这就是我到目前为止的代码(由于递归方面的困难,这并不是太多) 几乎只是将头部指针设置为中间信息(4)
我试图将js代码转换为java版本,但对正则表达式有点困惑:在js中,我有一个类似于:testString的表达式。拆分(“/(\w*\d)/g”) 我可以在java中使用什么等效语言?我试着用匹配器得到同样的结果。find()和split函数,但结果不一样。