二叉树简单实现

2020-08-29  本文已影响0人  coding_9d35

好久没有写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);
        }

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

上一篇 下一篇

猜你喜欢

热点阅读