一、释义
1.二叉树定义
1.首先需要明白二叉树只是一种存储结构,只是将元素使用二叉树这种方式进行存储而已,其本质不会改变元素本身,只是使用二叉树这种存储结构来优化其查找、CRUD等方式。
2.二叉树是一种特殊树形结构,其特点是每个结点只有两颗子树(或两个子节点)即二叉树中不存在度大于2的结点。如图所示:
3.二叉树一种有序树,如果将其左右子树颠倒则变成另一颗不同的二叉树树。即使一颗二叉树中只有一颗子树也要区分它是左子树还是右子树。
2.二叉树存储方式
1.顺序存储
#include<stdio.h>
#define MaxSize 100
struct TreeNode{
int value;
bool isEmpty; //用来判定此节点是否为空
};
int main(){
TreeNode tree[MaxSize];
int i;
for(i=0;i<100;i++){ //初始化二叉树
tree[i].value=0;
tree[i].isEmpty=true;
}
tree[0].value =55 ; //赋值测试
tree[0].isEmpty=false;
tree[1].value =75;
tree[1].isEmpty=false;
int j;
for(j=0;j<100;j++){
printf("%d, %d\n",tree[j].value,tree[j].isEmpty);
}
}
测试效果:
2.链式存储
#include<stdio.h>
#include<stdlib.h>
typedef struct TreeNode{
int value;
TreeNode* leftchild;
TreeNode* rightchild;
}BiTNode,*BiTree;
int main(){
BiTree p = NULL; //初始化一颗空树
p = (BiTNode*)malloc(sizeof(BiTNode));
p->value = 20;
BiTNode* leftchild = (BiTNode*)malloc(sizeof(BiTNode));
BiTNode* rightchild = (BiTNode*)malloc(sizeof(BiTNode));
p->leftchild =leftchild;
p->rightchild =rightchild;
leftchild->value = 25;
rightchild->value = 70;
BiTNode* leftchild2 = (BiTNode*)malloc(sizeof(BiTNode));
leftchild->rightchild = leftchild2;
leftchild2->value = 75;
}
如下为拓扑结构: