P158 例8-1 编写程序,建立如图8-10(b)所示的带头节点的二叉链存储结构二叉树。
头文件:BiTree.h
#include<stdio.h>
#include<stdlib.h>
typedef char DataType;
typedef struct Node
{
DataType data;
struct Node *leftChild;
struct Node *rightChild;
}BiTreeNode;
void Initiate(BiTreeNode **root)
{
*root = (BiTreeNode *)malloc(sizeof(BiTreeNode));
(*root)->leftChild = NULL;
(*root)->rightChild = NULL;
}
BiTreeNode *InsertLeftNode(BiTreeNode *curr,DataType x)
{
BiTreeNode *s, *t;
if(curr == NULL)
return NULL;
t = curr->leftChild;
s = (BiTreeNode*)malloc(sizeof(BiTreeNode));
s->data = x;
s->leftChild = t;
s->rightChild = NULL;
curr->leftChild = s;
return curr->leftChild;
}
BiTreeNode *InsertRightNode(BiTreeNode *curr,DataType x)
{
BiTreeNode *s, *t;
if(curr == NULL)
return NULL;
t = curr->rightChild;
s = (BiTreeNode *)malloc(sizeof(BiTreeNode));
s->data = x;
s->rightChild = t;
s->leftChild = NULL;
curr->rightChild = s;
return curr->rightChild;
}
void PrintBiTree(BiTreeNode *bt, int n)
{
int i;
if(bt == NULL)
return;
PrintBiTree(bt->rightChild,n + 1);
for(i=0;i<n;i++)
printf(" ");
if(n>=0)
{
printf("----");
printf("%c\n",bt->data);
}
PrintBiTree(bt->leftChild,n + 1);
}
源文件:例8-1.c
#include"BiTree.h"
int main()
{
BiTreeNode *root,*p;
Initiate(&root);
p=InsertLeftNode(root,'A');
p=InsertLeftNode(p,'B');
p=InsertLeftNode(p,'D');
p=InsertRightNode(p,'G');
p=InsertRightNode(root->leftChild,'C');
InsertLeftNode(p,'E');
InsertRightNode(p,'F');
PrintBiTree(root->leftChild,0);
return 0;
}