算法导论14:树形数据结构——二叉树 2016.1.14

  从上一篇开始应该就能感受到,其实既然环形的数据结构可以做出来,各种形状的数据结构都可以做出来,只要设计好节点的属性和节点之间的关系就行了。

  用指针的实现会更加好理解,但是编程复杂度会相对更高,用数组实现,编程复杂度相对低,但是相对不那么直观。所以两种方式灵活选择吧。(不过用c++很多内置对象就可以解决很多问题)

  在树的数据结构中,最简单也是最常用的就是二叉树了。关于二叉树的数组实现,在堆排序里已经写过了。所以这里只写一下指针的实现。

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>

typedef struct _node {
    char ch;
    struct _node *leftchild;
    struct _node *rightchild;
}node;

void buildtree(node *&p)
{
    p=(node *)malloc(sizeof(node));
    char c=getch();
    putchar(c);
    if (c==' ') {
        p->leftchild=NULL;
        p->rightchild=NULL;
    }
    else {
        p->ch=c;
        buildtree(p->leftchild);
        buildtree(p->rightchild);
    }
}

void showmidtree(node *&p)
{
    if (p->leftchild!=NULL || p->rightchild!=NULL) {
        putchar(p->ch);
    }
    if (p->leftchild!=NULL) shomidtree(p->leftchild);
    if (p->rightchild!=NULL) showmidtree(p->rightchild);
}

int main()
{
    node *root;
    buildtree(root);
    showpretree(root);
    return 0;
}

在建立的时候还是用到了递归,代码中输出二叉树用的是中序遍历,至于这些规则有什么用,目前我也不太清楚,也许后面会有算法用到吧。

posted @ 2016-01-14 18:42  lvmememe  阅读(373)  评论(0编辑  收藏  举报