如何将二叉树转换为二叉决策图

时间:2021-03-14 15:10:25

标签: c++ data-structures tree binary-search-tree binary-decision-diagram

struct TreeNode {
    int num;
    TreeNode* left;
    TreeNode* right;
};

TreeNode* cons_tree(int num, TreeNode *l, TreeNode *r) {
    TreeNode* tmp;
    tmp = new TreeNode;
    tmp->val = num;
    tmp->left = l;
    tmp->right = r;
    return tmp;
}

TreeNode* ordered_insertion_tree(int num, TreeNode *t) {
    if(t == NULL) {
        return cons_tree(num, NULL, NULL);
    }
    else if(num < t->val) {
        t->left = ordered_insertion_tree(num, t->left);
        return t;
    }
    else {
        t->right = ordered_insertion_tree(num, t->right);
        return t;
    }
}

Binary Decision Diagram (BDD)

Binary Search Tree (BST)

上面的代码展示了如何创建 BST。但是,我希望我的程序像 BDD 图像中显示的真值表一样。

两张图的区别:

  1. BDD 图像中的虚线代表“0”,实线代表用户输入中的“1”。
  2. 对于 BST,当用户输入小于根节点时,它代表左树。
  3. BDD 的根节点是字符串“x1”,BST 的根节点是 int 8。

例如,如果用户输入字符串“000”、“011”、“110”和“111”,这些叶节点将具有字符串“1”。

***输入将被附加到名为值的字符串向量中。因此,values[0] 代表“000”等等。 ***

我的问题是:

  1. 我应该如何重写ordered_insertion_tree 函数?最初我使用 int 来比较值,但现在它已更改为 std::string,我不知道如何进行比较。
  2. 如何更改节点的值?从表示第一个整数的“x1”到表示 n 个整数的“x2”...“xn”,最后到表示真值表的 0/1。

感谢阅读!

0 个答案:

没有答案