二叉树的创建与遍历
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); }
相关文章推荐
- 二叉树的遍历,二叉树的创建、前序遍历、中序遍历、后序遍历 (转)
- 二叉树创建及遍历算法(递归及非递归)
- 二叉树的创建、前序遍历、中序遍历、后序遍历
- 二叉树创建及遍历算法(递归及非递归)
- 二叉树的创建、前序遍历、中序遍历、后序遍历
- 创建一个二叉树,对该树线索化,对该树线索化遍历
- 二叉树的创建、前序遍历、中序遍历、后序遍历
- 二叉树创建及遍历算法(递归及非递归)
- 二叉树的创建、前序遍历、中序遍历、后序遍历
- 二叉树的创建、前序遍历、中序遍历、后序遍历
- 二叉树的创建、前序遍历、中序遍历、后序遍历
- 二叉树创建及遍历算法(递归及非递归)
- 二叉树创建及遍历算法(递归及非递归)
- 二叉树的创建、前序遍历、中序遍历、后序遍历
- 二叉树创建及遍历算法(递归及非递归)
- ::递归实现——创建二叉树 ----> 装入数据--->遍历---> 显示 --->销毁
- 二叉树的创建、前序遍历、中序遍历、后序遍历
- 二叉树创建及遍历算法(递归及非递归)
- 二叉树创建及遍历算法(递归及非递归)
- 二叉树创建及遍历算法(递归及非递归)