二叉树的建立和遍历

所谓遍历(Traversal)是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问。访问结点所做的操作依赖于具体的应用问题。

二叉树有三种遍历方法:

1、前序遍历,也叫先根遍历,遍历的顺序是,根,左子树,右子树;

2、中序遍历,也叫中根遍历,顺序是 左子树,根,右子树;

3、后序遍历,也叫后根遍历,遍历顺序,左子树,右子树,根。

同样二叉树的建立也有三种方式,在此处只做了前序建立二叉树的方法。以下就是二叉树的建立和遍历代码。欢迎大家拍砖。

#include<stdio.h>
#include <stdlib.h>
#include<malloc.h>

typedef struct treeNode
{
int data;
struct treeNode *leftTree;
struct treeNode *rightTree;
}linkTreeNode;
/*****************************************
用于测试的二叉树:
1
2 3
4 5 6 7

前序遍历结果:1 2 4 5 3 6 7
中序遍历结果:4 2 5 1 6 3 7
后序遍历结果:4 5 2 6 7 3 1
***************************************/
// 前序建立二叉树
//通过控制台需要输入的数据内容依次为:1,2,4,0,0,5,0,0,3,6,0,0,7,0,0
linkTreeNode *createNode()
{
linkTreeNode *node;
int x;
printf("输入结点值\n");
scanf("%d",&x);
if(x==0)
{
node=NULL;
}
else
{
node=(linkTreeNode *)malloc(sizeof(linkTreeNode));
node->data=x;
node->leftTree=createNode();
node->rightTree=createNode();
}
return node;
}

//打印结点数据内容
void visitData(linkTreeNode *node)
{
printf("tree node data: %d\n",node->data);
}
//前序遍历
void frontTraverse(linkTreeNode *node)
{
if (node==NULL)
{
return;
}

visitData(node);
frontTraverse(node->leftTree);
frontTraverse(node->rightTree);
}
//中序遍历
void middleTraverse(linkTreeNode *node)
{
if (node==NULL)
{
return;
}

middleTraverse(node->leftTree);
visitData(node);
middleTraverse(node->rightTree);
}
//后序遍历
void postorderTraverse(linkTreeNode *node)
{
if (node==NULL)
{
return;
}
postorderTraverse(node->leftTree);
postorderTraverse(node->rightTree);
visitData(node);
}

int main()
{
linkTreeNode *headNode=NULL;
headNode=createNode();

printf("前序遍历\n");
frontTraverse(headNode);
printf("中序遍历\n");
middleTraverse(headNode);
printf("后序遍历\n");
postorderTraverse(headNode);
return 1;
}

 

原文地址:https://www.cnblogs.com/wenxp2006/p/2651840.html