为了账号安全,请及时绑定邮箱和手机立即绑定

如何根据一个字符串递归建立二叉树?

如何根据一个字符串递归建立二叉树?

九州编程 2019-02-27 17:32:20
node *c2(char *s){ node *tem; if(*s == '#' || *s == '\0') tem = NULL; else{ tem = (node*)malloc(sizeof(struct node)); tem->data = *s; tem->left = NULL; tem->right = NULL; tem->left = c2(++s); tem->right = c2(++s); } return tem; } s是一个字符数组,这样建树有错吗?为什么输出的结果不对呢?谢谢大家
查看完整描述

2 回答

?
冉冉说

TA贡献1877条经验 获得超1个赞

tem->left = c2(++s);
tem->right = c2(++s);

构建完左子树后s的值只是加了1,在递归调用中并没有改变当前的s值。

查看完整回答
反对 回复 2019-03-01
?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

tem->left = c2()这种写法并没让树节点真正链接起来。
改成这样吧

typedef struct BiTNode {
    char data;
    struct BiTNode *left, *right;
}BiTNode, *BiTree;

void createBiTree(BiTree &T) {
    char el = *s++;
    if (el == '#' || el == '\0') {
        T = NULL;
    } else {
        T = (BiTNode *)malloc(sizeof(BiTNode));
        T->data = el;
        createBiTree(T->left);
        createBiTree(T->right);
    }
}
查看完整回答
反对 回复 2019-03-01
  • 2 回答
  • 0 关注
  • 505 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信