二叉树总结版

结点的构建

class BiTreeNode {
public:
	char data;//存放数据,结点的数据域
	BiTreeNode* LeftChild;//左子树指针,结点指针域
	BiTreeNode* RightChild;//右子树指针,结点指针域
	BiTreeNode() { LeftChild = NULL; RightChild = NULL; }
	~BiTreeNode(){}
};

树的构建

//树构造
class BiTree {
private:
	BiTreeNode* Root;//根节点指针
	string strTree;//字符串
	int pos;
	BiTreeNode* CreateBiTree();//构造二叉树(先序遍历法)
	void PreOrder(BiTreeNode* t);//先序遍历
	void InOrder(BiTreeNode* t);//中序遍历
	void PostOrder(BiTreeNode* t);//后序遍历
public:
	void CreateTree(string TreeArray);//构造二叉树接口
	void PreOrder();//先序遍历接口
	void InOrder();//中序遍历接口
	void PostOrder();//后序遍历接口
};

利用先序遍历法构造二叉树

//利用先序遍历法构造二叉树
void BiTree::CreateTree(string TreeArray) {//共有函数,对外接口
	pos = 0;
	strTree.assign(TreeArray);//字符串复制
	Root = CreateBiTree();
}
BiTreeNode* BiTree::CreateBiTree() {//递归建树,私有函数,类内实现
	BiTreeNode* T;
	char ch;
	ch = strTree[pos++];//取字符串pos的位置元素,先赋值后加加
	if (ch == '0') {
		T = NULL;
	}
	else {
		T = new BiTreeNode();//构造新结点
		T->data = ch;//数据域赋值
		T->LeftChild = CreateBiTree();//指针域成为新的结点继续构造二叉树
		//左结点先构建完再构建右结点,为先序遍历法
		T->RightChild = CreateBiTree();//指针域成为新的结点继续构造二叉树
	}
	return T;
}

先序遍历法

//先序遍历
void BiTree::PreOrder() {
	PreOrder(Root);
}
void BiTree::PreOrder(BiTreeNode* t) {
	if (t) {
		cout << t->data;
		PreOrder(t->LeftChild);
		PreOrder(t->RightChild);
	}
}

中序遍历法

//中序遍历
void BiTree::InOrder() {
	InOrder(Root);
}
void BiTree::InOrder(BiTreeNode* t) {
	if (t) {
		InOrder(t->LeftChild);
		cout << t->data;
		InOrder(t->RightChild);
	}
}

后序遍历法

//后序遍历
void BiTree::PostOrder() {
	PostOrder(Root);
}
void BiTree::PostOrder(BiTreeNode* t) {
	if (t) {
		PostOrder(t->LeftChild);
		cout << t->data;
		PostOrder(t->RightChild);
	}
}

层次遍历法

从上到下,从左到右进行遍历输出

利用队列先进先出的性质:先把根节点放入队列中,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值