Joox 2017-11-16 15:52 采纳率: 100%
浏览 892
已采纳

建立二叉树的函数建不出来,找人帮忙看看问题在哪

 #include<iostream>
using namespace std;

struct BinTreeNode{
    char data;
    BinTreeNode *leftChild, *rightChild;
    BinTreeNode(){leftChild = NULL; rightChild = NULL; }
    BinTreeNode(char x, BinTreeNode *l, BinTreeNode *r){ data = x; leftChild = l; rightChild = r; }
};

class BinaryTree{
protected:
    BinTreeNode *root;
public:
    BinTreeNode* CreateBinTree(char valueArray[], BinTreeNode *subTree);
    void preOrder(BinTreeNode *root);
    void preOrderNonrecursion(BinTreeNode *root);
    void inOrder(BinTreeNode *root);
    void inOrderNonrecursion(BinTreeNode *root);
    void postOrder(BinTreeNode *root);
    void postOrderNonrecursion(BinTreeNode *root);
    void getHeight(BinaryTree *root);
    BinTreeNode* getRoot(){ return root;}
    int treeSize(BinTreeNode *root);
};

BinTreeNode* BinaryTree::CreateBinTree(char valueArray[],BinTreeNode *subTree){
    static int num = -1;
    BinTreeNode *p = new BinTreeNode();
    if (num < sizeof(valueArray))
    {
        p->data = valueArray[++num];
        CreateBinTree(valueArray,p->leftChild);
        CreateBinTree(valueArray,p->rightChild);
    }
    return p;
}

void BinaryTree::preOrder(BinTreeNode *p){
    if (p != NULL){
        cout << p->data;
        preOrder(p->leftChild);
        preOrder(p->rightChild);
    }
}

int main(){
    char valueArray[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    BinaryTree a;
    a.preOrder(a.CreateBinTree(valueArray,a.getRoot()));
    return 0;
}

就运行以后什么东西都没有出来,直接提示“按任意键结束”
前序遍历输出的函数是书上的,不可能错,如果正常运行应该会有输出的
所以建二叉树的函数有问题,但我感觉逻辑上没什么问题呀,请大神帮忙指点迷津

  • 写回答

7条回答 默认 最新

  • chuanyueniwo 2017-11-17 01:59
    关注

    1、获取数组长度不对
    2、建立树的时候,因为是root是指针参数传递,所以要用双重指针
    3、CreateBinTree函数既然返回P 却没有承接对象

    #include
    using namespace std;

    struct BinTreeNode{
    int data;
    BinTreeNode *leftChild, *rightChild;
    BinTreeNode(){leftChild = NULL; rightChild = NULL; }
    BinTreeNode(char x, BinTreeNode *l, BinTreeNode *r){ data = x; leftChild = l; rightChild = r; }
    };

    class BinaryTree{
    protected:
    BinTreeNode root;
    public:
    void CreateBinTree(char valueArray[], BinTreeNode **subTree);
    void preOrder(BinTreeNode *root);
    void preOrderNonrecursion(BinTreeNode *root);
    void inOrder(BinTreeNode *root);
    void inOrderNonrecursion(BinTreeNode *root);
    void postOrder(BinTreeNode *root);
    void postOrderNonrecursion(BinTreeNode *root);
    void getHeight(BinaryTree *root);
    BinTreeNode
    getRoot(){ return root;}
    int treeSize(BinTreeNode *root);
    };

    void BinaryTree::CreateBinTree(char valueArray[],BinTreeNode **subTree){
    static int num =0;

    if (num < 10)
    {   *subTree = new BinTreeNode();
        (*subTree)->data = valueArray[num];
        num++;
        CreateBinTree(valueArray,&((*subTree)->leftChild));
        CreateBinTree(valueArray,&((*subTree)->rightChild));
    }
     //return *subTree;
    

    }

    void BinaryTree::preOrder(BinTreeNode *p){
    if (p != NULL){
    cout << p->data;
    preOrder(p->leftChild);
    preOrder(p->rightChild);
    }
    }

    int main(){
    char valueArray[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

    BinaryTree a;
    BinTreeNode * root = a.getRoot();
    a.CreateBinTree(valueArray, &root);
    a.preOrder(root);
    getchar();
    return 0;
    

    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(6条)

报告相同问题?

悬赏问题

  • ¥50 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?