博客
关于我
C++实现二叉树结构及其二叉树常用算法
阅读量:726 次
发布时间:2019-03-21

本文共 1813 字,大约阅读时间需要 6 分钟。

文章目录

头文件

使用node 定义节点,并重命名为BTNode。二叉树类 BTree中含有一个成员BTNode* head;存放二叉树的头节点。

typedef int ElemType;const int MaxSize = 20;typedef struct node {	data: ElemType;	lchild: node*;	rchild: node*;}BTNode;class BTree {	head: BTNode*;	public:		BTree() {			head = new BTNode;		}		BTree(const char* str) {			CreateBTNode(str);		}		// ...其他成员函数定义}

成员函数

构造函数

两个构造函数:一个无参构造,只为头节点开辟空间。一个有参构造,传入一个以括号表示法表示的树的const char*字符串对象。

BTree::BTree(const char* str) {	CreateBTNode(str);}

创建二叉树CreateBTNode

使用void CreateBTNode(const char* str);方法创建。

创建过程使用栈作为辅助,对于一个合法的字符串,遍历其中所有元素,如果遇到一个节点元素(default部分),初始化节点,若该节点作为头节点,则执行
this->head = p;,若不是头节点,通过
k判断该节点作为栈顶元素的左孩子节点或者右孩子节点。如果遇到
(,此时
p已经被赋值,其值为上一个遍历到的节点元素,
(表明该节点
p将作为之后节点的父节点,将
p进栈,并将
k置为1。如果遇到
,,表明某个节点的左子树处理完,将要处理右孩子。如果遇到
),表明当前栈顶元素的孩子节点已经处理完,将其出栈。

void BTree::CreateBTNode(const char* str) {	BTNode* St[MaxSize], * p = NULL;	int top = -1;	int k = 1;	int j = 0;	char ch;	this->head = NULL;	ch = str[j];	while (ch != '\0') {		switch (ch) {		case '(': // 遇到左括号			++top;			St[top] = p;			k = 1;			break;		case ')': // 遇到右括号			top--;			break;		case ',': // 遇到逗号			k = 2;			break;		default:			// 遇到一个元素时,节点初始化			p = new BTNode;			p->data = ch;			p->lchild = p->rchild = NULL;			if (this->head == NULL) {				this->head = p;			} else {				switch (k) {				case 1:					St[top]->lchild = p;					break;				case 2:					St[top]->rchild = p;					break;				}			}		}		ch = str[++j];	}}

输出二叉树DispBTree

BTree类提供公共接口void DispBTree();用于输出二叉树,并void DispBTree(BTNode* b);中实现接口

输出过程通过递归实现,并以括号表示法格式输出。

void BTree::DispBTree() {	this->DispBTree(this->head);	cout << endl;} void BTree::DispBTree(BTNode* b) {if (b == NULL) return;cout << (char)b->data;if (b->lchild != NULL || b->rchild != NULL) {cout << "(";this->DispBTree(b->lchild);if (b->rchild != NULL) {cout << ",";}this->DispBTree(b->rchild);cout << ")";}}

转载地址:http://lttgz.baihongyu.com/

你可能感兴趣的文章
python固定后缀(名物化词汇)词频统计:抽取+统计+可视化
查看>>
python商品数据分析可视化系统(带爬虫)京东销售数据分析 计算机毕业设计 源码下载
查看>>
python商品库存管理系统 django框架 商品网站 MySQL数据库 源码下载 计算机毕业设计
查看>>
Python哪个版本最稳定好用2023.10.19
查看>>
python命名空间更改_Python模块xml.etree.ElementTree自动修改xml命名空间键
查看>>
Python命名中尾随下划线有什么好处?
查看>>
Python启动脚本
查看>>
python吊打Excel?屁!那是你不会用!
查看>>
Python合并两张图片 | 先叠透明度再合并 (附Demo)
查看>>
python各进制的表述与转换
查看>>
python各种库安装
查看>>
python可视化matplotlib_如何使用Python中最强大的可视化工具Matplotlib?
查看>>
python可维护性_使用这7大神器,让你的Python 代码更容易于维护
查看>>
python变量的详细教程_Python零基础入门教程之语法入门[变量](第二期)
查看>>
Python变量命名方法-ChatGPT4o作答
查看>>
Python变量与运算符
查看>>
python单元测试之unittest
查看>>
Python单元测试unittest实战
查看>>
python协程实时输出_Python 协程以及事件循环的问题,怎么知道 IO 读取结束了呢?...
查看>>
Python化身“安全老中医”:一键搞定工控系统漏洞,从零基础到精通,收藏这篇就够了!
查看>>