字符串生成链式二叉树

问题遇到的现象和发生背景

img

用代码块功能插入代码,请勿粘贴截图
#pragma once
#include
#include
using namespace std;
class BtNode
{
public:
    char data;
    BtNode* left;
    BtNode* right;
    BtNode(char c = '\0') :data(c), left(NULL), right(NULL) {}
};

BtNode* CreateTree(BtNode* root, string& str)
{
    int k = 0;
    stack S;
    BtNode* cur = NULL;//临时栈
    for (int i = 0; i length(); i++)
    {
        switch (str[i])
        {
        case '(':
            S.push(cur);//左括号将元素入栈,并且下一个元素必是左孩子节点
            k = 1;
            break;
        case ')'://右括号出栈
            S.pop();
            break;
        case ','://逗号判断下个元素是右孩子节点
            k = 2;
            break;
        default:
            cur = new BtNode(str[i]);
            if (!root)
                root = cur; 
                if (k == 1)
                    S.top()->left = cur;//左孩子
                else if (k == 2)
                    S.top()->right = cur;//右孩子
                k = 0;
                break;                                                                                                                                     
        }
    }
    return root;
}
void Print(BtNode* root)
{
    if (!root)
        return;
    cout << root->data;
    if (root->left || root->right)
    {
        cout << "(";
        Print(root->left);
        if (root->right)
        {
            cout << ",";
            Print(root->right);
        }
        cout << ")";
    }
}
#include
using namespace std;
#include"BinaryTree.h"
int main()
{
    BtNode* root=NULL;
    string i = "A(B(D,E(H(J,K(L,M(,N)))),C(F,G(,I)))";
    cout << i<CreateTree( root,i);
    Print(root);
}

运行结果及报错内容

img

我的解答思路和尝试过的方法

我F11调了几遍,发现E无法插入到B的右子树,导致他后面的都插不了,然后本来应该和B是兄弟关系的C变成B的右子树,一直找不出问题来,烦的雅痞。