创建
这里是按照先序次序输入节点的值,如果节点为NULL,则输入#,下面是两个例子
图一输入如下:ABC##D###
图二输入如下:ABC##DE##F##GH##K##
生成效果如下
遍历
先序遍历:根节点->左子树->右子树,
图一遍历结果为:A B C D
图二遍历结果为:A B C D E F G H K中序遍历:左子树->根节点->右子树
图一遍历结果为:C B D A
图二遍历结果为:C B E D F A H G K后序遍历:左子树->右子树->根节点
图一遍历结果为:C D B A
图二遍历结果为:C E F D B H K G A
上面三种遍历方法,可能看代码会更好理解一点
binary_tree.h
#ifndef __BINARY_TREE_H__
#define __BINARY_TREE_H__
typedef int ElementType ;
typedef struct BI_TREE_T
{
ElementType value;
struct BI_TREE_T *lChild;
struct BI_TREE_T *rChild;
}BI_TREE;
extern void binary_tree_main_test(void);
#endif
binary_tree.c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "binary_tree.h"
BI_TREE * binary_tree_create(void)
{
char ch;
BI_TREE *tree;
scanf("%c",&ch);
//printf("input %c \n", ch);
if('#' == ch)
{
tree = NULL;
}
else
{
tree = (BI_TREE *)malloc(sizeof(BI_TREE));
tree->value = ch;
tree->lChild = binary_tree_create();
tree->rChild = binary_tree_create();
}
return tree;
}
void binary_tree_preorder_traverse(BI_TREE * tree)
{
if(tree)
{
printf("%c ", tree->value);
binary_tree_preorder_traverse(tree->lChild);
binary_tree_preorder_traverse(tree->rChild);
}
}
void binary_tree_inorder_traverse(BI_TREE * tree)
{
if(tree)
{
binary_tree_inorder_traverse(tree->lChild);
printf("%c ", tree->value);
binary_tree_inorder_traverse(tree->rChild);
}
}
void binary_tree_postorder_traverse(BI_TREE * tree)
{
if(tree)
{
binary_tree_postorder_traverse(tree->lChild);
binary_tree_postorder_traverse(tree->rChild);
printf("%c ", tree->value);
}
}
void binary_tree_destroy(BI_TREE * tree)
{
if(tree)
{
binary_tree_destroy(tree->lChild);
binary_tree_destroy(tree->rChild);
free(tree);
tree = NULL;
}
}
void binary_tree_main_test(void)
{
BI_TREE *tree = binary_tree_create();
printf("\nPreorder traverse : ");
binary_tree_preorder_traverse(tree);
printf("\nInorder traverse : ");
binary_tree_inorder_traverse(tree);
printf("\nPostorder traverse : ");
binary_tree_postorder_traverse(tree);
printf("\n");
binary_tree_destroy(tree);
}