当前位置: 首页 > 编程笔记 >

在C ++中将三元表达式转换为二叉树

笪涛
2023-03-14
本文向大家介绍在C ++中将三元表达式转换为二叉树,包括了在C ++中将三元表达式转换为二叉树的使用技巧和注意事项,需要的朋友参考一下

在本教程中,我们将讨论将三元表达式转换为二叉树的程序。

为此,我们将提供一个三元表达式。我们的任务是根据可能的各种路径(选择),以二叉树的形式转换给定的表达式。

示例

#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函数,但结果不一样。