广义表输入
#include<bits/stdc++.h>
using namespace std;
typedef char ElementType;
typedef struct Node
{
ElementType data;
struct Node *lchild;
struct Node *rchild;
}BTNode,*BTree;
BTree createTree(char s[]);
int main()
{
char a[1010]={};
gets(a);
createTree(a);
return 0;
}
/*你的提交的代码将被添加在此处,请完成题目所要求的函数的定义*/
BTree createTree(char s[]) {
BTNode *p;
BTNode *rt;
stack <BTree> S;
p = (BTNode * )malloc(sizeof(BTNode));
p->lchild = NULL;
p->rchild = NULL;
p->data = s[0];
S.push(p);
rt = p;
for(int i = 1; s[i] != '\0'; i++) {
if('A'<=s[i] && s[i] <= 'Z') {
p->data = s[i];
}
if(s[i] == '(') {
p = p->lchild;
p->lchild = NULL;
p->rchild = NULL;
S.push(p);
}
if(s[i] == ',') {
S.pop();
p = S.top()->rchild;
p->lchild = NULL;
p->rchild = NULL;
S.push(p);
}
if(s[i] == ')') {
S.pop();
}
}
return rt;
}
创建二叉树卡了我好几天了,求求大佬帮帮忙
私信交流一手吧。
BTree createTreeMy(char s[]) {
Node *root = new Node();
root->data = s[0];
Node *now = root, *parent = NULL;
Node *lchild, *rchild;
stack<Node*> st;
for(int i = 1; s[i] != '\0'; i++){
if(s[i] == '('){
st.push(now);
now = NULL;
}
else if((s[i] >= 'A' && s[i] <= 'Z')||(s[i] >= 'a' && s[i] <= 'z')){
now = new Node();
now->data = s[i];
now->lchild = now->rchild = NULL;
}
else if(s[i] == ','){
st.push(now);
now = NULL;
}
else if(s[i] == ')'){
rchild = now;
lchild = st.top();
st.pop();
parent = st.top();
st.pop();
printNode(parent);
printNode(lchild);
printNode(rchild);
cout<<endl;
parent->lchild = lchild;
parent->rchild = rchild;
//st.push(parent);
now = parent;
}
}
return now;
}
BTree createTree(char s[]) {
BTNode *p;
BTNode *rt;
BTNode *lchild, *rchild, *parent;
stack <BTree> S;
p = (BTNode * )malloc(sizeof(BTNode));
p->lchild = NULL;
p->rchild = NULL;
p->data = s[0];
S.push(p);
rt = p;
for(int i = 1; s[i] != '\0'; i++){
if('A' <= s[i] && s[i] <= 'Z') {
p = (Node* ) malloc(sizeof(Node));
p->data = s[i];
p->lchild = NULL;
p->rchild = NULL;
S.pop();
S.push(p);
}
if(s[i] == '(') {
S.push(NULL);
}
if(s[i] == ',') {
S.push(NULL);
}
if(s[i] == ')') {
rchild = S.top();
S.pop();
lchild = S.top();
S.pop();
parent = S.top();
S.pop();
parent->lchild = lchild;
parent->rchild = rchild;
S.push(parent);
}
}
return rt;
}
您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632