二叉树的构建及遍历
代码:
#include <stdio.h>
typedef struct BinaryTreeNode {
char data;
struct BinaryTreeNode* left;
struct BinaryTreeNode* right;
} BTNode;
//创建节点
BTNode* buyNode(char x) {
BTNode* newnode = (BTNode*)malloc(sizeof(BTNode));
if (newnode == NULL) {
perror("malloc fail!");
exit(1);
}
newnode->data = x;
newnode->left = newnode->right = NULL;
return newnode;
}
//前序遍历
BTNode* creatrTree(char* arr, int* pi) {
if (arr[*pi] == '#') {//如果取到的是空字符,那么就不要创建它的根节点
(*pi)++;//继续往后走
return NULL;
}
//先创建arr[*pi]这个根节点,然后后置++,这样就到了后面的结点
BTNode* root = buyNode(arr[(*pi)++]);
root->left = creatrTree(arr, pi);//把根节点的左孩子当作新的根节点
root->right = creatrTree(arr, pi);
return root;
}
//中序遍历--左根右
void InOrder(BTNode* root) {
if (root == NULL) {
return;
}
InOrder(root->left);//左
printf("%c ", root->data);//中
InOrder(root->right);//右
}
int main() {
//读取用户输入的字符串保存在字符数组中
char arr[100];
scanf("%s",arr);
//根据字符串(前序遍历)创建二叉树
int i = 0;
BTNode* root = creatrTree(arr, &i);//root指向二叉树的根节点
//输出二叉树的中序遍历
InOrder(root);
return 0;
}