二叉树的顺序存储结构:
0号元下标存储长度
斜树这种极端情况会造成空间利用率不高
链式存储结构:
二叉链表:
左指针和右指针分别指向两个孩子:
typedef struct BiTNode{
ElemType data;
struct BiNode *lchild,*rchild;
}BiTNode,*BiTree;
^代表NULL
思路:递归到最后的空指针
#include <stdio.h>
#include <stdlib.h>
typedef char ElemType;
typedef struct BiTNode{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
//创建一棵二叉树,约定用户遵照谦虚便利的方式输入数据
CreateBiTree(BiTree *T){
char c;
scanf("%c",&c);
if(' ' == c){ //没有节点,则输入空格
*T = NULL; //空节点地址为NULL
}
else{
*T = (BiTNode *)malloc(sizeof(BiTNode));
(*T)->data = c;
CreateBiTree(&(*T)->lchild); //递归创造二叉树
CreateBiTree(&(*T)->rchild);
}
}
visit(){
printf("%c 位于第 %d 层\n",c , level);
}
//遍历二叉树
PreOrderTraverse(BiTree T, level){
if(T){ //非空,则打印
visit(T->data, level);
PreOrderTraverse(T->lchild, level+1);
PreOrderTraverse(T->rchild, level+1);
}
}
int main(){
int level = 1;
BiTree T = NULL;
CreateBiTree(&T);
PreOrderTraverse(T, level);
}
//输入AB' 'D' '' 'CE' '' '' '