树型结构是信 息的一种 重要组织形式
树是最为常用 的数据结构它的实际应用非常广泛二叉
序遍历有中序和后序遍历序列可以唯一确定一棵二叉树。对于给几个数据的排序或在已知的几个数据中进行查找二叉树均能提供一种十分有效的方法比如在查找问题上任何借助于比较法查找长度为Ⅳ的一个序表的算法都可以表示成一株二叉树。反之任何二叉树都对应一个查找有序表的有效方法根据树的数学理论对于算法分析的某些最有启发性的应用是与给出用于计算各种类型中不同树的数目的公式有关的。
本文对二叉树以及二叉树的各种功能做介绍以及写出一些基本的程序让我们对二叉树的理解有更好的效果。
关键词二叉树的遍历左子树右子树递归
目录
1 .问题概述
1 . 1问题描述
创建二叉树并遍历基本要求
该程序集成了如下功能
1 二叉树的建立
2递归和非递归先序中序和后序遍历二叉树
3按层次遍历二叉树
4交换二叉树的左右子树
5输出叶子结点
6递归和非递归计算叶子结点的数目
1 . 2需求分析
分先序遍历中序遍历和后序遍历三种情况考虑。
1 .先序遍历当二叉树非空时按以下顺序遍历否则结束操作① 访问根结点
② 按先序遍历规则遍历左子树
③ 按先序遍历规则遍历右子树
2. 中序遍历当二叉树非空时按以下顺序遍历否则结束操作① 按中序遍历规则遍历左子树
② 访问根结点
③ 按中序遍历规3遍历右子树。
3.后序遍历当二叉树非空时按以下顺序遍历否则结束操作① 按后序遍历规则遍历左子树
② 按后序遍历规则遍历右子树
1 . 3设计内容和要求
对任意给定的二叉树顶点数自定建立它的二叉链表存贮结构并利用栈的五种基本运算清空堆栈、压栈、弹出、取栈顶元素、判栈空实现二叉树的先序、 中序、后序三种周游输出三种周游的结果。
1 .4流程图及结构图
开始i=0
图1b
c
a
图1 .2二叉链表存储结构模拟图
2.概要设计
2. 1数据结构设计
1 二叉树结点数据类型定义为template<typename T>struct BiNode
{
BiNode<T>*rchi ld,*lchi ld;//指向左孩子的指针
T data;//结点数据信息};
2 二叉树数据类型定义为template<typename T>class BiTree{template<typename T>friend ostream&operator<<(ostream&os,BiTree<T>&bt);publ ic:B i Tree();//无参构造函数
BiTree(int m){};//有参空构造函数
BiTree(T ary[], int num,T none);//有参构造函数
B i Tree();//析构函数void preorder();//递归前序遍历void inorder();//递归中序遍历void postorder();//递归后续遍历void levelorder();//层序遍历int count();//计算二叉树的结点数void display(ostream&os);//打印二叉树有层次
void creat();//创建二叉树protected: //以下函数供上面函数调用//对应相同功能
Voidcreat(BiNode<T>*&root);//创建void release(BiNode<T>*&root);//删除
BiNode<T>*Bui ld(Tary[], intnum,T none, int idx);//用数组创建二叉树void PreOrder(BiNode<T>* root);//前序遍历void PostOrder(BiNode<T>* root);//后续遍历void LevelNum(BiNode<T>* root);//层序遍历void preorder(Bi Node<T>* root);//递归前序遍历void inorder(BiNode<T>* root);//递归中序遍历void postorder(BiNode<T>* root);//递归后续遍历void levelorder(BiNode<T>*root);//层序遍历int count(BiNode<T>* root);//计算结点数void display(ostream&os,BiNode<T>* root, int dep);//打印static bool leastCommanAncestor(BiNode<T>*root,T va,T vb,BiNode<T>private:BiNode<T>*rootptr;
};
2. 2源程序代码
#include <iostream>usi ng namespace std;
*******************************************************************
******************
T data;
BTNode<T> * Lch i l d,*Rch i l d;
BTNode(T nodeVal ue = T() ,BTNode<T>* l ef tNode = NULL,BTNode<T>*r i ghtNode =NULL )
:data(nodeValue) ,Lchi ld( l ef tNode) ,Rchi ld( r ightNode){ } //可选择参数的默认构造函数
} ;
*******************************************************************
*******************
//二叉树的建立template <class T>voi d createB i nTree(BTNode<T> * &root )
{
BTNode<T>* p = root ;
BTNode<T>* k;
T nodeValue ;ci n>>nodeVal ue;i f (nodeValue==-1 )
{r o o t=NULL;
}else
{root=new BTNode<T>() ;root->data = nodeVal ue;createBinTree( root->Lchi ld) ;createBinTree( root->Rchi ld) ;
}
//二叉树的先序遍历template <class T>void preOrder( BTNode<T> * &p)
{i f (p)
{cout<<p->data<<" " ;preOrder(p->Lchi ld) ;preOrder(p->Rchi ld) ;
}
}
*******************************************************************
*******************
//二叉树的中序遍历template <class T>void i nOrder(BTNode<T> * &p)
{i f (p)
{i nOrder(p->Lchi ld) ;cout<<p->data<<" " ;i nOrder(p->Rchi ld) ;
}
}
*******************************************************************
*******************
//二叉树的后序遍历
官方网站:点击访问青云互联活动官网优惠码:终身88折扣优惠码:WN789-2021香港测试IP:154.196.254美国测试IP:243.164.1活动方案:用户购买任意全区域云服务器月付以上享受免费更换IP服务;限美国区域云服务器凡是购买均可以提交工单定制天机防火墙高防御保护端口以及保护模式;香港区域购买季度、半年付、年付周期均可免费申请额外1IP;使用优惠码购买后续费周期终身同活动价,价格不...
硅云怎么样?硅云是一家专业的云服务商,硅云的主营产品包括域名和服务器,其中香港云服务器、香港云虚拟主机是非常受欢迎的产品。硅云香港可用区接入了中国电信CN2 GIA、中国联通直连、中国移动直连、HGC、NTT、COGENT、PCCW在内的数十家优质的全球顶级运营商,是为数不多的多线香港云服务商之一。目前,硅云香港云服务器,CN2+BGP线路,1核1G香港云主机仅188元/年起,域名无需备案,支持个...
提速啦的来历提速啦是 网站 本着“良心 便宜 稳定”的初衷 为小白用户避免被坑 由赣州王成璟网络科技有限公司旗下赣州提速啦网络科技有限公司运营 投资1000万人民币 在美国Cera 香港CTG 香港Cera 国内 杭州 宿迁 浙江 赣州 南昌 大连 辽宁 扬州 等地区建立数据中心 正规持有IDC ISP CDN 云牌照 公司。公司购买产品支持3天内退款 超过3天步退款政策。提速啦的市场定位提速啦主...