数据结构——二叉树的构建及遍历操作

二叉树的构建

  1. 常量的预定义
#define TRUE 1
#define FALSE 0
#define OK  1
#define ERROR  0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int  Status;
typedef int  ElemType;
  1. 二叉树的定义以及创建
typedef struct BiTNode
{/* 树结点定义 */
 	ElemType data;/* 结点数据 */
    struct BiTNode *lchild,*rchild;//左右孩子指针
} BiTNode,*BiTree;

Status CreateBiTree(BinTree &T) 
{  
	// 按先序次序输入二叉树中结点的值(一个字符),’#’字符表示空树,
	// 构造二叉链表表示的二叉树T。
	 char ch;
	 scanf("%c",&ch);
	 if (ch=='#') T = NULL;
	 else 
	 {
		if (!(T = (BiTNode *)malloc(sizeof(BiTNode)))) return ERROR;
		T->data=ch; // 生成根结点
		CreateBiTree(T->lchild);// 构造左子树
		CreateBiTree(T->rchild);// 构造右子树
	 }
	 return OK;
} // CreateBiTree

二叉树的遍历

1. 先序遍历
遍历过程为:
① 访问根结点;
② 先序遍历其左子树;
③ 先序遍历其右子树。
例子:

A(B D F E )(C G H I)
先序遍历=> A B D F E C G H I

在这里插入图片描述
代码如下:

void PreorderTraversal( BiTree BT )
{
    if( BT ) {
    	/* 此处假设对BT结点的访问就是打印数据 */
        printf("%d ", BT->Data );/* 假设数据为整型 */
        PreorderTraversal( BT->lchild );//递归先序遍历左子树
        PreorderTraversal( BT->rchild );//递归先序遍历右子树
    }
}

2. 中序遍历
遍历过程为:
① 中序遍历其左子树;
② 访问根结点;
③ 中序遍历其右子树。
例子:

(D B E F) A (G H C I)
中序遍历=> D B E F A G H C I

在这里插入图片描述
代码如下:

void InorderTraversal( BiTree BT )
{
    if( BT ) {
        InorderTraversal( BT->lchild );
        /* 此处假设对BT结点的访问就是打印数据 */
        printf("%d ", BT->Data); /* 假设数据为整型 */
        InorderTraversal( BT->rchlid );
    }
}

3. 后序遍历
遍历过程为:
① 后序遍历其左子树;
② 后序遍历其右子树;
③ 访问根结点。

(D E F B )( H G I C) A
后序遍历=> D E F B H G I C A


代码如下:

void PostorderTraversal( BiTree BT )
{
    if( BT ) {
        PostorderTraversal( BT->lchild );
        PostorderTraversal( BT->rchlid );
        printf("%d ", BT->Data);
    }
}

总结

先序、中序和后序遍历过程:遍历过程中经过结点的路线一样,只是访问各结点的时机不同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值