您的位置:首页 > 理论基础 > 数据结构算法

二叉树的创建与遍历

2016-12-23 12:06 155 查看

创建

这里是按照先序次序输入节点的值,如果节点为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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息