typedef struct binaryTree {
char item;
struct binaryTree *lChild;
struct binaryTree *rChild;
}binaryTree, *pBinaryTree;
- 二叉树的初始化创建,二叉树创建的过程中按照先序遍历的方式输入一颗满二叉树,缺失的节点元素使用#补足;构建的过程中先递归创建左子树,然后递归创建右子数;’#’作为递归的结束;
pBinaryTree createBinaryTree() {
char tmp = '0';
pBinaryTree treeNode = NULL;
scanf("%c", &tmp);
if (tmp == '#')
{
treeNode = NULL;
}
else
{
treeNode = (binaryTree*)malloc(sizeof(binaryTree));
treeNode->item = tmp;
treeNode->lChild = createBinaryTree();
treeNode->rChild = createBinaryTree();
}
return treeNode;
}
void preVisitBiTree(pBinaryTree root) {
if (root)
{
printf("%c", root->item);
preVisitBiTree(root->lChild);
preVisitBiTree(root->rChild);
}
}
void inVisitBiTree(pBinaryTree inRoot) {
if (inRoot)
{
inVisitBiTree(inRoot -> lChild );
printf("%c", inRoot->item);
inVisitBiTree(inRoot->rChild);
}
}
void lastVisitBiTree(pBinaryTree lastRoot) {
if (lastRoot)
{
inVisitBiTree(lastRoot->lChild);
inVisitBiTree(lastRoot->rChild);
printf("%c", lastRoot->item);
}
}
三种遍历二叉树的递归结构是相似的,只是递归遍历的先后有区别
测试:
int main() {
pBinaryTree binaryTree = createBinaryTree();
preVisitBiTree(binaryTree);
printf("\n");
inVisitBiTree(binaryTree);
printf("\n");
lastVisitBiTree(binaryTree);
printf("测试二叉树");
return 0;
}