二叉树先序遍历,中序遍历,后序遍历
1. 先序遍历
先序遍历的顺序是 根 左 右
2. 中序遍历
中序遍历的顺序是 左 根 右
3. 后序遍历
后序遍历的顺序是 左 右 根
注意 :我这里生成二叉树是用输入"#"符号来表示这个节点没有左子树或右子树.
代码
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <malloc.h>
typedef struct TreeNode
{
char data;
TreeNode* left;
TreeNode* right;
}TreeNode;
void PrintVisit(TreeNode* root)
{
printf("%c", root->data);
}
TreeNode* NewTree(char indata)
{
TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode));
root->data = indata;
root->left = NULL;
root->right = NULL;
return root;
}
int CreTree(TreeNode* root)
{
char lch,rch;
printf("输入%c左子树:",root->data);
scanf("%c",&lch);
getchar();
printf("输入%c的右子树:",root->data);
scanf("%c",&rch);
getchar();
if (lch != '#')
{
root->left = NewTree(lch);
CreTree(root->left);
}
if (rch != '#')
{
root->right = NewTree(rch);
CreTree(root->right);
}
return 1;
}
void PreOrder(TreeNode* root)
{
if (root != NULL)
{
PrintVisit(root);
PreOrder(root->left);
PreOrder(root->right);
}
}
void InOrder(TreeNode* root)
{
if (root != NULL)
{
InOrder(root->left);
PrintVisit(root);
InOrder(root->right);
}
}
void PastOrder(TreeNode* root)
{
if (root != NULL)
{
PastOrder(root->left);
PastOrder(root->right);
PrintVisit(root);
}
}
int main()
{
TreeNode* root = NULL;
char ro;
printf("输入根节点:");
scanf("%c", &ro);
getchar();
root=NewTree(ro);
CreTree(root);
PreOrder(root);
printf("\n");
InOrder(root);
printf("\n");
PastOrder(root);
}