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