我有一棵包含数学表达式的二叉树。我使用数组将二叉树保存在内存中。
我将运算符(如+或tan)另存为数组中的字符串。对于每个i节点,左节点索引为2 * i + 1,右节点索引为2 * i + 2。每个节点都可以是操作数或运算符。我想将二叉树转换为数学表达式,例如:“ 2 + tan(tan(10))”。如何在C#中将二叉树转换为数学表达式?

  +
 / \
2  tan
   / \               ===>      "2+tan(tan(10))"
 tan
 / \ / \
10


这是我的二叉树代码:

public class Tree
{
    private readonly List<Node> _nodes;

    public Tree(int size)
    {
        _nodes = new List<Node>();

        for (var i = 0; i < size; i++)
        {
            _nodes.Add(new Node(i, null));
        }

        for (var i = 0; i < size; i++)
        {
            if (2*i+1 > size-1 || 2*i+2 > size-1)
                break;

            _nodes[i].Left = _nodes[2*i + 1];
            _nodes[i].Right = _nodes[2*i + 2];
        }
    }
     ...
}

最佳答案

您可以递归地进行操作-编写一个返回字符串的方法,并完成以下三件事:


当两个子树都为空时,返回节点的内容
当只有一个子树为非null时,递归调用该方法,然后返回节点的内容,并在括号中返回递归调用的结果
当两个子树都不为空时,对左子树和裂谷子树进行递归调用,并返回左结果和该节点的内容,再返回右结果。

关于c# - 二叉树到数学表达式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27347434/

10-13 05:44