博客
关于我
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 中 3 个不可思议的返回功能
查看>>
python 中 dict 的另一种用法
查看>>
Python 中 PIL 读取图片出现异常旋转的解决方法
查看>>
python读取word表格内容(1)
查看>>
python 中os.path.join 双斜杠的解决办法
查看>>
python 中PIL.Image和OpenCV图像格式相互转换
查看>>
Python 中Semaphore 信号量对象、Event事件、Condition
查看>>
python 中with的使用及样例
查看>>
python读取wav文件并播放[pyaudio/wave]
查看>>
python读取txt文件的行数
查看>>
Python 中内置的最大堆 API
查看>>
Python 中只有一个 True 和一个 False 对象吗?
查看>>
python读取mtcars数据集并实现以下操作_关于数据处理。。,Python交流,技术交流区,鱼C论坛 - Powered by Discuz!...
查看>>
Python 中多线程与多处理之间的区别
查看>>
Python 中如何使用 lambda 函数
查看>>
Python 中如何创建多行字符串?
查看>>
Python 中如何处理异常?
查看>>
Python 中如何实现列表的切片?
查看>>
Python 中如何实现字典的排序?
查看>>