C++不同编译器下 , 函数的返回值有关问题~
C++不同编译器下 , 函数的返回值问题~~~
输入树的前序遍历序列如,ABC####,输出树的后序遍历序列:CBA,其中#表示其孩子结点为空。
对应的树应该是:
下面的程序create函数在低版本的g++ 下能返回根结点的地址,因此post_order(head)能正常输出后序序列;但是在高版本g++下create函数返回的是NULL,相应的post_order(head)也就无输出。
怎么改呢?
------解决思路----------------------
既然是分支结构自然每个分支都要返回值
------解决思路----------------------
create()写得很有问题。。。实在搞不懂你为什么这么写?
你是要根据你的输入来构建普通二叉树是吧?然后前序。后序输出?
------解决思路----------------------
p节点new出来不return, 楼主想干嘛。。。
输入树的前序遍历序列如,ABC####,输出树的后序遍历序列:CBA,其中#表示其孩子结点为空。
对应的树应该是:
A
/ \
B #
/ \
C #
/\
# #
下面的程序create函数在低版本的g++ 下能返回根结点的地址,因此post_order(head)能正常输出后序序列;但是在高版本g++下create函数返回的是NULL,相应的post_order(head)也就无输出。
怎么改呢?
#include <iostream>
#include <cstdio>
using namespace std;
string s;
int i;
struct node {
char data;
node * left, * right;
} * head;
node * create()
{
if (s[++i] != '#')
{
node * p = new node;
p->data = s[i];
p->left = create();
p->right = create();
}
else
return NULL;
}
void post_order(node * p)
{
if (p)
{
post_order(p->left);
post_order(p->right);
cout << p->data;
}
}
int main()
{
while (cin >> s)
{
i = -1;
head = create();
post_order(head);
cout << '\n';
}
return 0;
}
------解决思路----------------------
node * create()
{
node * p;
if (s[++i] != '#')
{
p = new node;
p->data = s[i];
p->left = create();
p->right = create();
}
else
p = NULL;
return p;
}
既然是分支结构自然每个分支都要返回值
------解决思路----------------------
create()写得很有问题。。。实在搞不懂你为什么这么写?
你是要根据你的输入来构建普通二叉树是吧?然后前序。后序输出?
------解决思路----------------------
p节点new出来不return, 楼主想干嘛。。。