二叉树的创建、先序、中序以及后序遍历

二叉树结点结构与双链表结点结构式类似的,创建二叉树时,需清楚其结点结构。至于先序遍历、中序遍历以及后序遍历方法,采用思想都是递归的思想。

先创建如下二叉树(黄色中的0,当输入为0时,返回上一级,按先序方式创建二叉树)


输入顺序为: 1234000500607900800

先序遍历输出为: 123456798

中序遍历输出为:     432516978

后序遍历输出为:     435298761

程序代码为:

// Bitree.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>

using namespace std;
typedef int type;

//定义数结点
typedef struct bNode
{
	type data;
	struct bNode *lchild;
	struct bNode *rchild;
}bNode,*bTree;

//先序创建二叉树  
bTree CreateBitree(bTree &T)
{
	type ch;
	cin>>ch;
	if(0==ch)
	{
	 T=NULL;
	}
	else
	{
	   T=(bTree)malloc(sizeof(bNode));
	   if(NULL==T)
	   {
	     cout<<"申请内存失败!"<<endl;
		 return NULL;
	   }
	   T->data=ch;
	   CreateBitree(T->lchild);
	   CreateBitree(T->rchild);
	}

   return T;
}

//先序遍历
void PreOrder(bTree T)
{
	if(T)
	{
		cout<<T->data<<" ";
		PreOrder(T->lchild);
		PreOrder(T->rchild);
	}
}
//中序遍历
void InOrder(bTree T)
{
	if(T)
	{
		InOrder(T->lchild);
		cout<<T->data<<" ";
		InOrder(T->rchild);
	}
}

//后序遍历
void PostOrder(bTree T)
{
	   if(T)
	   {
		PostOrder(T->lchild);
		PostOrder(T->rchild);
		cout<<T->data<<" ";
	   }
}
int _tmain(int argc, _TCHAR* argv[])
{
	bTree T;
	CreateBitree(T);

	PreOrder(T);
	cout<<endl;
	InOrder(T);
	cout<<endl;
	PostOrder(T);

	return 0;
}

程序输出为:



计算树的深度,为左子树和右字树的最大深度加1

//计算树的深度
int TreeDepth(bTree T)
{
	if(!T)  return 0;
	int n1=TreeDepth(T->lchild);
	int n2=TreeDepth(T->rchild);

	return (n1>n2?n1:n2)+1;

}

结果为:


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值