美文网首页
二叉树简单实现

二叉树简单实现

作者: coding_9d35 | 来源:发表于2020-08-29 23:22 被阅读0次

    好久没有写C++,重新拾起来还是有很多别扭的地方。。。 技术就像浩瀚天空无边无际,我们都在探讨的路上。今天手写一个简单C++二叉树的实现,都是一边看,一边回忆。然后再动手实现,过程中有遇到这些问题。

    1.我们实现之前首先需要考虑使用链表还是顺序表实现。(这里采用链表实现,顺序表实现暂时没有~)

    2.ADT怎么设计,需要设计哪些对外API供外界调用

    3.C++的基础语法,哎呀~ 好多忘记了~

    4.动手吧~

    首先,把二叉树生成放在C++的构造方法里面实现,代码如下:

    // 构造二叉树,由str串创建二叉树
        BinTree(char *str){
            BTNode *st[MaxSize], *p=NULL;
            int top=-1,k,j=0;
            char ch;
            root = NULL;
            ch = str[j];
            while (ch!='\0') {
                switch (ch) {
                    case '(':
                        top++;
                        st[top]=p;
                        k=1;
                        break;
                    case ')':
                        top--;
                        break;
                    case ',':
                        k=2;
                        break;
                    default:
                        p = (BTNode *)malloc(sizeof(BTNode));
                        p->data = ch;
                        p->lchirld=p->rchirld=NULL;
                        if (root==NULL) {
                            root = p;
                        }else{
                            switch (k) {
                                case 1:
                                    st[top]->lchirld=p;
                                    break;
                                case 2:
                                    st[top]->rchirld=p;
                                    break;
                            }
                        }
                        break;
                }
                j++;
                ch=str[j];
            }
            
        }
    

    展示结点:

    BTNode *LchirldNode(BTNode *p){
            return p->lchirld;
        }
        
        BTNode *RchirldNode(BTNode *p){
            return p->rchirld;
        }
    
    // 获取深度
        int BTNodeDepth(BTNode *p){
            int ldepth,rdepth;
            if (p==NULL) {
                return 0;
            }else{
                ldepth = BTNodeDepth(p->lchirld);
                rdepth = BTNodeDepth(p->rchirld);
                return (ldepth>rdepth?(ldepth+1):(rdepth+1));
            }
        }
    

    最后在析构方法中删除结点:

    void DelTree(BTNode *p){
            if (p!=NULL) {
                DelTree(p->lchirld);
                DelTree(p->rchirld);
                free(p);
            }
        }
    
    ~BinTree(){
            if (root!=NULL) {
                DelTree(root);
            }
    

    一个简单的二叉树就实现了,啊,太菜了~ 还请大牛多多指点~

    相关文章

      网友评论

          本文标题:二叉树简单实现

          本文链接:https://www.haomeiwen.com/subject/pbkssktx.html