本周要实现二叉树三叉链表的存储,刚开始想用递归的方法不过好像不行。
附一个递归代码
P.S.要区分空树
(*T)->data = c; (*T)->lchild = NULL; (*T)->rchild = NULL; CreateBiTree(&((*T)->lchild)); CreateBiTree(&((*T)->rchild));
换一种方法,好像要用到二重链表?
终于强行de出来了bug,果然链表知识没学好到数据结构就自闭
(真的一点都没错
总结一下:
1、C语言都还给老师了c!=’#'写成字符串,死循环了,告辞
2、发现传地址更方便,但是好容易丢失。现在都不太用return了
函数:void
3、传不好地址的结果就是翻车
4、
void CreateBiTree(BiTree T);//创建一棵二叉树
void PreOrderTraverse(BiTree T);//先序遍历二叉树
两者的形参不同
5、为什么不同?
主要应该是在create函数里有一句T = tree[1];吧,tree是子函数里定义的变量,如果传递的是BiTree T的话就是T = tree[1]返回主函数tree[1]消失了,T也就消失了(?
6、至于void PreOrderTraverse(BiTree T);则挺常规的,之前写栈、链表的时候都用过差不多的。
就是:
typedef struct BiTNode
{
TelemType data;
struct BiTNode *lchild, *rchild, *root;//左右孩子、双亲指针
}BiTNode,*BiTree;
一个是节点一个是指向节点的指针
主函数:BiTree T;
调用的时候:PreOrderTraverse(T);
7、创建的时候:CreateBiTree(&T);用到了二重链表
8、好像要把一个东西传回来的话必须把它的地址传出去。
9、BiTree tree[MAXSIZE] 是指针数组,所以要指向指针的指针
10、改了不用二重链表的结构,从数组里大概可以看出一些端倪:
返回的只有一个节点,没串起来。