二叉链表树的遍历

2023-05-16

题目:

        使用二叉链表树创建算法Status CreatBiTree(BiTree &T)和其他代码

二叉树的遍历有三种:

前序遍历:先访问根节点,再遍历左子树,最后遍历右子树;

中序遍历:先遍历左子树,再访问根节点,最后遍历右子树;

后序遍历:先遍历左子树,再遍历右子树,最后访问根节点;

代码:

#include <iostream>
#include <stdlib.h> 
#include <string.h> 
#include <math.h>
using namespace std;
typedef char ElemType;   //定义结点数据为字符型 
typedef int Status;       //定义函数类型为int型 
#define ERROR 0  
#define OK 1   

int leafNum=0;

typedef struct BiTNode{        //定义结构体  
	ElemType        data;     //结点数值  
	struct BiTNode   *lchild;  //左孩子指针  
	struct BiTNode   *rchild;  //右孩子指针    
}BiTNode, *BiTree; 

void Visit(ElemType e)
{
	cout << e;
}

Status CreatBiTree(BiTree &T)//用扩展先序遍历序列创建二叉树,如果是当前树根置为空,否则申请一个新节点 
{   
	ElemType ch;   
	cin>>ch;    
	if(ch=='#')
		T=NULL;  
	else  
	{     
		T=(BiTNode*)malloc(sizeof(BiTNode));//申请一段关于该节点类型的存储空间     
		T->data=ch;                     //生成根结点     
		CreatBiTree(T->lchild);         //构造左子树      
		CreatBiTree(T->rchild);         //构造右子树  
	}   
	return OK;
}

Status PreOrder(BiTree T)  //按先序次序(递归)访问二叉树 
{    
	if(T==NULL) 
		return ERROR;
	Visit(T->data);
	PreOrder(T->lchild);         //构造左子树      
	PreOrder(T->rchild);         //构造右子树
	return OK;  
}

Status InOrder(BiTree T)  //按中序次序(递归)访问二叉树 
{  
	if(T==NULL) 
		return ERROR;
	InOrder(T->lchild);         //构造左子树      
	Visit(T->data);
	InOrder(T->rchild);         //构造右子树
	return OK;  
}

Status PostOrder(BiTree T)  //按后序次序(递归)访问二叉树 
{  
	if(T==NULL) 
		return ERROR;
	PostOrder(T->lchild);         //构造左子树      
	PostOrder(T->rchild);         //构造右子树
	Visit(T->data);
	return OK;  
}

Status PrePrintLeaf(BiTree T)  //按先序次序(递归)输出叶子结点
{
	if(T==NULL) 
		return ERROR;
	if(T->lchild==NULL && T->rchild==NULL)
		Visit(T->data);
	PrePrintLeaf(T->lchild);         //构造左子树      
	PrePrintLeaf(T->rchild);         //构造右子树
	return OK;    
}

Status CountLeafNum(BiTree T)  //统计叶子结点的个数
{
	if(T==NULL) 
		return ERROR;
	if(T->lchild==NULL && T->rchild==NULL)
		leafNum++;
	CountLeafNum(T->lchild);         //构造左子树      
	CountLeafNum(T->rchild);         //构造右子树
	return OK;  
}

Status PostPrintNode(BiTree T)  //按后序次序(递归)输出度为2的结点
{ 
	if(T==NULL) 
		return ERROR;
	if(T->lchild!=NULL && T->rchild!=NULL)
	Visit(T->data);
	PostPrintNode(T->lchild);         //构造左子树      
	PostPrintNode(T->rchild);         //构造右子树
	return OK;  
}

int PostTreeDepth(BiTree T)  //获取二叉树高度 
{  
	int right=0,left=0,max=0;
	if(T==NULL)
		return 0;
	right = PostTreeDepth(T->lchild);         //构造左子树      
	left = PostTreeDepth(T->rchild);         //构造右子树
	max = right>left?right:left;
	return max+1;
}

效果图:

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

二叉链表树的遍历 的相关文章

  • Windows下Cmake安装步骤详解(图文)

    文章目录 Cmake介绍Cmake下载及安装 Cmake介绍 CMake是一个跨平台的安装 xff08 编译 xff09 工具 xff0c 可以用简单的语句来描述所有平台的安装 编译过程 xff0c 并且输出对应的makefile或者pro
  • C语言:通过指针模拟实现strcat函数

    模拟实现strcat strcat函数的功能 把src所指向的字符串 xff08 包括 0 xff09 复制到dest所指向的字符串后面 xff08 删除dest原来末尾的 0 xff09 要保证dest足够长 xff0c 以容纳被复制进来
  • C语言中将字符串拆分再进行拼接

    我们有时候需要对于字符串进行操作 xff0c 主要用到strcat和strtok两个函数 xff0c 因此记录下这次的操作方式以便之后查阅 span class token macro property span class token d
  • 并行编程实现矩阵乘法优化

    实现四种矩阵乘法程序 xff0c 并对比运行效率 1 xff09 串行算法 2 xff09 Catch优化 3 xff09 SSE版本 4 xff09 分片策略 span class token macro property span cl
  • c++的函数reserve()和unique()和sort()

    函数reserve span class token comment vector reserve span span class token macro property span class token directive keywor
  • 关于c中代码加 ‘\‘ 进行换行的说明

    我们在c与c 43 43 中经常会遇到一种情况就是加 进行换行来保持代码整体结构一致的使用情况 xff0c 那么具体来说换行的规则是什么 xff0c 这里进行一下记录 span class token macro property span
  • git的命令总结

    先把清单列出来git cheat sheet git 命令总结 git的init和git clonegit add和git commit 提交二连git checkout 反向操作git reset 回退HEAD指针git revert 同
  • 宏定义中的可变参数 __VA_ARGS__ 用法 与 #和##的用法

    首先了解一下可变参数 span class token macro property span class token directive keyword include span span class token string lt st
  • C++结构体简单链表原理解释

    对结构体简单链表原理的简单解释 xff0c 程序如下 xff1a struct lianbiao int no string name struct lianbiao next lianbiao head 61 nullptr tail 6
  • linux小连招

    Linux命令目录 查看当前shell的种类find命令查找文件 查看当前shell的种类 查看当前发行版可以使用的shell xff1a chao 64 chao span class token function cat span et
  • 侵略性奶牛(对于二分的总结)

    题目 Farmer John has built a new long barn with N 2 lt 61 N lt 61 100 000 stalls The stalls are located along a straight l
  • To Fill or Not to Fill(贪心算法)

    题目描述 有了高速公路 xff0c 开车从杭州到任何其他城市都很容易 但由于汽车的油箱容量有限 xff0c 我们必须不时地在路上找到加油站 不同的加油站可能会给出不同的价格 你被要求仔细设计最便宜的路线去 输入描述 对于每个测试实例 第一行
  • cmake语法

    目录 基本语法命令行projectadd executabletarget sourcessetfileadd librarymessagetarget link librariestarget include directoriesfin
  • 《C++个人学习笔记》使用cout或cin显示未定义标识符

    在vs自动生成的c 43 43 项目中 xff0c 初次使用cout或cin报未定义标识符错误 xff0c 是由于未声明命名空间的原因 解决方法 xff1a 在头文件中声明全局命名空间 加入 using namespace std 表示使用
  • rosbag error

    rosbag play 报错 error 1 md5sum span class token punctuation span span class token constant ERROR span span class token pu
  • CMake实践(三)静态库和动态库构建

    本节的任务是 xff1a 建立一个静态库和动态库 xff0c 提供HelloFunc函数供其他程序使用 xff0c HelloFunc函数向终端输出Hello World字符串 安装头文件和共享库 1 准备工作 在 backup cmake
  • checksum算法详细的计算方法、实现思路与python校验验证

    1 checksum是什么 xff1f Checksum xff1a 电脑 总和检验码 xff0c 校验和 在数据处理和数据通信领域中 xff0c 用于校验目的的一组数据项的和 这些数据项可以是数字或在计算检验总和过程中看作数字的其它字符串
  • java循环标号

    在Java中 xff0c 要想跳出多重循环 xff0c 可以在外面的循环语句前定义一个标号 xff0c 然后在里层循环体的代码中使用带有标号的break 语句 xff0c 即可跳出外层循环 switch xff08 continue和bre
  • SQL Server安装提示【需要microsoft.NET Framework 3.5 Service Pack 1】

    问题 我在自己电脑安装SQL Server 2014 的时候遇到了这个问题 xff0c SQL Server安装提示 需要microsoft NET Framework 3 5 Service Pack 1 xff1a 解决方法 1 打开控

随机推荐