二叉树的创建以及遍历均需要通过递归方式进行
节点包括:节点数据,两个分叉(一个为左子树、一个为右子树)
下面的代码输入将创建如下图所示二叉树?:
先序遍历结果:ABC
中序遍历结果:BAC
后序遍历结果:BCA
代码
#include<stdio.h>
#include<stdlib.h>
typedef char DataType;
typedef struct Node {
DataType data;
struct Node* leftChild;
struct Node* rightChild;
}TreeNode;
typedef TreeNode* BinaryTree;
void createBinaryTree(BinaryTree* binaryTree) {
char data;
printf("Input TreeNode Data:");
scanf("%c", &data);
getchar();
if (data == '#')
return;
TreeNode* treeNode = (TreeNode*)malloc(sizeof(TreeNode));
if (!treeNode) {
printf("Overflow");
}
*binaryTree = treeNode;
treeNode->data = data;
treeNode->leftChild = treeNode->rightChild = NULL;
createBinaryTree(&treeNode->leftChild);
createBinaryTree(&treeNode->rightChild);
}
void visit(DataType data) {
printf("%c", data);
}
void preTravel(BinaryTree binaryTree) {
if (!binaryTree)
return;
visit(binaryTree->data);
preTravel(binaryTree->leftChild);
preTravel(binaryTree->rightChild);
}
void midTravel(BinaryTree binaryTree) {
if (!binaryTree)
return;
midTravel(binaryTree->leftChild);
visit(binaryTree->data);
midTravel(binaryTree->rightChild);
}
void postTravel(BinaryTree binaryTree) {
if (!binaryTree)
return;
postTravel(binaryTree->leftChild);
postTravel(binaryTree->rightChild);
visit(binaryTree->data);
}
int main()
{
BinaryTree binaryTree;
createBinaryTree(&binaryTree);
preTravel(binaryTree);
printf("\n");
midTravel(binaryTree);
printf("\n");
postTravel(binaryTree);
printf("\n");
return 0;
}
运行截图