二叉树
一.遍历二叉树
遍历分为前序,中序,后序,层序四种遍历。
一个例子,前序遍历
先根,然后左子树,然后右子树。
由于一个普通的二叉树遍历并没有任何意义,所以为了方便起见直接链接一个题。改题的思路就是将一个数组先建成一个前序遍历的树,然后再中序遍历这棵树再输出。
#include <stdio.h>
#include<stdlib.h>
struct TreeNode {
struct TreeNode* left;
struct TreeNode* right;
char val;
};
struct TreeNode* TreeCreat(int* pi, char* a)
{
if (a[*pi] == '#')
{
(*pi)++;
return NULL;
}
struct TreeNode* root = (struct TreeNode*)malloc(sizeof(struct TreeNode));
root->val = a[(*pi)++];
root->left = TreeCreat(pi, a);
root->right = TreeCreat(pi, a);
return root;
}
void InOrder(struct TreeNode* root)
{
if (root == NULL)
return;
InOrder(root->left);
printf("%c ", root->val);
InOrder(root->right);
}
int main() {
char a[110];
scanf("%s", a);
int i = 0;
struct TreeNode* root = TreeCreat(&i, a);//创建一个前序遍历的树
InOrder(root);//中序遍历
return 0;
}
层序遍历,利用队列进行入队出队操作。队列里存的是树的结点指针。