C++不同编译器下 , 函数的返回值有关问题~

C++不同编译器下 , 函数的返回值问题~~~
输入树的前序遍历序列如,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, 楼主想干嘛。。。