二叉树:1、空树
2、非空数:有跟节点和左子树、右子树构成(由递归方式实现)
搜索(查找)二叉树:结构上是左子树都比根节点小,右子树都比根节点大
前序遍历:根 左子树 右子树
中序遍历:左子树 根 右子树
后序遍历:左子树 右子树 根
代码表示:
typedef int BTDataType;
typedef struct BinaryTreeNode //二叉树--->用带指针的结构体实现
{
BTDataType data;//存放数据
struct BinaryTreeNode* left;//左子树指针
struct BinaryTreeNode* right;//右子树指针
}BTNode;
BTNode* BuyNode(BTDataType x)
{
BTNode* newnode = (BTNode*)malloc(sizeof(BTNode));
if (newnode == NULL)
{
perror("malloc fail!");
return NULL;
}
newnode->data = x;//放入新的数据
newnode->left = newnode->right = NULL;//递归终止条件
return newnode;//返回新的节点
}
BTNode* CreateNode()//手动链接一个二叉树结构
{
BTNode* node1 = BuyNode(1);
BTNode* node2 = BuyNode(2);
BTNode* node3 = BuyNode(3);
BTNode* node4 = BuyNode(4);
BTNode* node5 = BuyNode(5);
BTNode* node6 = BuyNode(6);
node1->left = node2;
node1->right = node4;
node2->left = node3;
node4->left = node5;
node4->right = node6;
return node1;
}
//前序遍历
void PreOrder(BTNode* p)
{
if (p == NULL)//为空树
{
printf("NULL ");
return;
}
printf("%d ", p->data);
PreOrder(p->left);
PreOrder(p->right);
}
//中序遍历
void InOrder(BTNode* p)
{
if (p == NULL)//为空树
{
printf("NULL ");
return;
}
InOrder(p->left);
printf("%d ", p->data);
InOrder(p->right);
}
//后序遍历
void PostOrder(BTNode* p)
{
if (p == NULL)//为空树
{
printf("NULL ");
return;
}
PostOrder(p->left);
PostOrder(p->right);
printf("%d ", p->data);
}
int main()
{
BTNode* p=CreateNode();//封装:将创建二叉树的过程进行封装
PreOrder(p);
printf("\n");
InOrder(p);
printf("\n");
PostOrder(p);
return 0;
}