【数据结构作业四】以二叉链表作存储结构,建立一棵二叉树,并输出该二叉树的先序、中序、后序遍历序列、高度和其叶子结点数。_实现二叉树的二叉链表存储结构,并输出二叉树_tf1997的博客-程序员资料

技术标签: 大学  二叉树  遍历  数据结构  

#include <iostream>
#define MAXSIZE 100
using namespace std;
typedef char TElemType;
typedef struct BiTNode {
	TElemType data;
	struct BiTNode *lchild,*rchild;
} BiTNode,*BiTree;
void InOrderTraverse1(BiTree T) {
	//先序遍历
	if(T) {
		cout<<T->data;
		InOrderTraverse1(T->lchild);
		InOrderTraverse1(T->rchild);
	}
}

void InOrderTraverse2(BiTree T) {
	//中序遍历
	if(T) {
		InOrderTraverse2(T->lchild);
		cout<<T->data;
		InOrderTraverse2(T->rchild);
	}
}
void InOrderTraverse3(BiTree T) {
	//后序遍历
	if(T) {
		InOrderTraverse3(T->lchild);
		InOrderTraverse3(T->rchild);
		cout<<T->data;
	}
}
void CreateBiTree(BiTree &T) {
	//先序
	char ch;
	cin>>ch;
	if(ch=='#')
		T=NULL;
	else {
		T=new BiTNode;
		T->data=ch;
		CreateBiTree(T->lchild);
		CreateBiTree(T->rchild);
	}
}
int Depth(BiTree T) {
	int n,m;
	if(T==NULL)
		return 0;
	else {
		m=Depth(T->lchild);
		n=Depth(T->rchild);
		if(m>n)
			return(m+1);
		else
			return(n+1);
	}
}
int NodeCount(BiTree T) {
	if(T==NULL)
		return 0;
	else
		return NodeCount(T->lchild)+NodeCount(T->rchild)+1;
}
int main() 
{
	BiTree a;
	int height,num;
	cout<<"请输入二叉树的元素!\n";
	CreateBiTree(a);
	cout<<"按先序遍历法输出该二叉树的元素为:\n";
	InOrderTraverse1(a);
    cout<<"\n按中序遍历法输出该二叉树的元素为:\n"; 
	InOrderTraverse2(a);
	cout<<"\n按后序遍历法输出该二叉树的元素为:\n"; 
	InOrderTraverse3(a);
	height=Depth(a);
	num=NodeCount(a);
	cout<<"\n该二叉树高度为:"; 
	cout<<height<<endl;
	cout<<"该二叉树结点数为:"; 
	cout<<num;
	return 0;

}

输入: 

输出: 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/tf1997/article/details/78357205

智能推荐

mybatis cache_chouyan7019的博客-程序员资料

一、MyBatis的Cache配置 1、全局开关:默认是true,如果它配成false,其余各个Mapper XML文件配成支持cache也没用。 &lt;settings&gt; &lt;setting name="cacheEnabled" value="true"/&gt; &lt;/s...

JavaCV入门指南:帧录制器/推流器(FrameRecorder)的原理与应用_eguid_1的博客-程序员资料

JavaCV入门指南系列:JavaCV入门指南:序章JavaCV入门指南:调用FFmpeg原生API和JavaCV是如何封装了FFmpeg的音视频操作JavaCV入门指南:帧抓取器(FrameGrabber)的原理与应用JavaCV入门指南:帧录制器/推流器(FrameRecorder)的原理与应用目录前言FrameRecorder(录制器/推流器)介绍FrameRecorder的结构和分析两个FrameRecorder实现类的介绍FrameRecorder的结构.

java入门01 [ 概述, java开发环境搭建, 第一个小程序]_辉者光也的博客-程序员资料

1. 概述1.1 什么是java语言java是1995年美国SUN公司推出的高级编程语言, 2009年SUN公司被甲骨文公司收购.1.2 java跨平台这里我们重点介绍几个名词:JVM (Java Virtual Matchine) : java虚拟机, 简称JVM, 我们编写的java源代码编译后计算机是如何运行的? 就是在计算机的操作系统上安装了JVM, java源代码编译后在JV...

Get-LocalGroup_get-localgroupca_allway2的博客-程序员资料

Get-LocalGroupModule:Microsoft.PowerShell.LocalAccountsGets the local security groups.SyntaxPowerShellCopyGet-LocalGroup [[-Name] &lt;String[]&gt;] [&lt;CommonParameters&gt;]PowerShellCopyGet-LocalGroup [[-SID] &lt;SecurityIdenti

微信开发——python获取开放平台的component_verify_ticket_cocosgirl的博客-程序员资料

第三方平台创建的时候填写了如下参数:第三方平台创建成功后,微信会定时每隔10分钟发送一次ComponentVerifyTicket,只需要在“授权事件接收URL”对应的方法里接收就行(发送的是post请求)。具体接收python代码参考如下:#微信每隔10分钟推送一次class WxOpenCallbackHandler(tornado.web.RequestHandler): def ...

移植linux2.6.19成功^_^_JasonBUG的博客-程序员资料

前几天把VIVI和U-BOOT移植成功后,就进入了主要的学习环节,LINUX的移植,从www.kernel.org下载2.6.19.tar.bz2,解压:#tar jxvf 2.6.19.tar.bz2 1、修改内核顶层目录的Makefile,找到ARCH和CROSS_COMPILE的地方,修改为    ARCH                    ?= arm    CROSS_COM

随便推点

IplImage的使用 从三通道图中分离出三个单通道_iplimage 获取单个通道_Fuyuan Xu的博客-程序员资料

opncvtest.cpp : 定义控制台应用程序的入口点。  //  #include "stdafx.h"  #include    #include      using namespace std;  using namespace cv;     int _tmain(int argc, _TCHAR* argv[])  {      co

Linux常用命令——CentOS7中systemctl的使用与CentOS6中service的区别(四)_言玉gz的博客-程序员资料

Linux 服务管理两种方式service和systemctlCentOS7中systemctl的使用与CentOS6中service的区别

anaconda r 语言_anaconda 配置R语言_舒苓的博客-程序员资料

anaconda是python 和 R的集成开发环境anaconda 的下载(此步不谈)加速清华现在好像不支持(不确定)中大的# 加速condaconda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/free/conda config --set show_channel_urls yes123我认为不用新建虚拟环...

Css中Position属性的含义_after_的博客-程序员资料

position有四个参数:static  | relative | absolute | fixedposition:static,意味元素没有被定位,元素会出现在文档本该出现位置,是页面元素默认的定位的方式,一般无需指定,除非想要覆盖之前设置的定位,一旦position:relative,很明白,相对元素本该位置的偏移量

mbedtls入门和使用_CNccion的博客-程序员资料

1.mbedtls简介 ARM mbedtls使开发人员可以非常轻松地在(嵌入式产品中加入加密和 SSL/TLS 功能。它提供了具有直观的 API 和可读源代码的 SSL 库。该工具即开即用,可以在大部分系统上直接构建它,也可以手动选择和配置各项功能。 mbedtls 库提供了一组可单独使用和编译的加密组件,还可以使用单个配置头文件加入或排除这些组件。从功能角...

【Scratch】青少年蓝桥杯_每日一题_5.25_排序_scratch蓝桥杯比赛秩序的问题_梁同学与Android的博客-程序员资料

用心写好每一篇文章效果图一、题目背景本题是Scratch编程问题,出现在第十届蓝桥杯省赛中。二、编程实现老师给小猫出了一道题:在列表1中生成5个在1~99范围内的随机整数﹐然后按照从大到小的顺序将它们依次移到列表2中。例如:在列表1中随机生成的整数依次是"12,3,1,13,17”,在处理之后列表2中的整数依次是“17,13,12,3,1”。1、每次点击绿旗后﹐在屏幕中都显示如图-1所示的列表1和列表2,且在列表1中随机生成5个在1~99范围内的随机整数﹐而列表2中内容为空。然后小猫.

推荐文章

热门文章

相关标签