牛客 KY11.二叉树遍历
思路:
我们接收字符串以后,创建一个二叉树结构体,然后就可以开始建立树,如果是字符就malloc新的结点去存储,是**'#'就返回空**,最后用递归以根左右的顺序创建结点。树建立完成后,再用中序遍历一次即可。
代码:
#include <stdio.h> #include <stdlib.h> typedef struct BTNode { struct BTNode* left; struct BTNode* right; char val; }BTNode; BTNode* BuyNode(char x) //malloc结点 { BTNode* newnode = (BTNode*)malloc(sizeof(BTNode)); if(newnode == NULL) { perror("malloc fail"); return NULL; } newnode->val = x; newnode->left = NULL; newnode->right = NULL; return newnode; } BTNode* createTree(char* a, int* pi) { if(a[*pi] == '#') { (*pi)++; return NULL; } BTNode* root = BuyNode(a[*pi]); //创建结点 (*pi)++; //该字符存储,指针后移 root->left = createTree(a,pi); root->right = createTree(a,pi); return root; } void Inorder(BTNode* root) //中序遍历 { if(root == NULL) { return; } Inorder(root->left); printf("%c ", root->val); Inorder(root->right); } int main() { char a[100]; int i = 0; scanf("%s",a); BTNode* root = createTree(a, &i); //i要传地址,不然递归返回以后i会重置 Inorder(root); return 0; }