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