数据结构C++版链式二叉树

这篇博客详细介绍了如何使用C++编程语言实现链式二叉树的数据结构,包括相关代码实现和操作方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码实现:

//二叉树
#include<iostream>
#include<queue>
using namespace std;
struct BinTreeNode {
	char data;
	BinTreeNode* LeftChild, * RightChild;
	BinTreeNode() :LeftChild(NULL), RightChild(NULL) {

	}
	BinTreeNode(char x, BinTreeNode* l = NULL, BinTreeNode* r = NULL) :data(x), LeftChild(l), RightChild(r) {

	}
};
class BinaryTree {
public:
	BinaryTree():root(NULL) {
	}
	~BinaryTree() { destroy(root); }
	//清空二叉树
	bool IsEmpty() {
		return(root == NULL) ? true : false;
	}
	//二叉树高度
	int Height(BinTreeNode* subtree) {
		if (subtree == NULL)return 0;
		else {
			int i = Height(subtree->LeftChild);
			int j = Height(subtree->RightChild);
			return (i < j) ? j + 1 : i + 1;
		}
	}
	//二叉树节点个数
	int size(BinTreeNode* subtree) {
		if (subtree == NULL)return 0;
		else return 1 + size(subtree->LeftChild) + size(subtree->RightChild);
	}
	//销毁二叉树
	void destroy(BinTreeNode* subtree) {
		if (subtree != NULL) {
			destroy(subtree->RightChild);
			destroy(subtree->LeftChild);
			delete subtree;
		}
	}
	//中序输出
	void InOrder(BinTreeNode* subtree) {
		if (subtree != NULL) {
			InOrder(subtree->LeftChild);
			cout << subtree->data << " ";
			InOrder(subtree->RightChild);
		}
	}
	//前序输出
	void PreOrder(BinTreeNode* subtree) {
		if (subtree != NULL) {
			cout << subtree->data << " ";
			PreOrder(subtree->LeftChild);
			PreOrder(subtree->RightChild);
		}
	}
	//后序输出
	void PostOrder(BinTreeNode* subtree) {
		if (subtree != NULL) {
			PostOrder(subtree->LeftChild);
			PostOrder(subtree->RightChild);
			cout << subtree->data << " ";
		}
	}
	//层次输出
	void LevelOrder() {
		queue<BinTreeNode*> Q;
		BinTreeNode* p = root;
		Q.push(root);
		while (!Q.empty()) {
			p=Q.front(); 
			cout << p->data << " ";
			Q.pop();
			if (p->LeftChild != NULL)Q.push(p->LeftChild);
			if (p->RightChild != NULL)Q.push(p->RightChild);
		}
	}
	//完全前序建立二叉树
	void input(BinTreeNode*& subtree) {
		char a;
		cin >> a;
		if (a != '#') {
			subtree = new BinTreeNode(a);
			cout << subtree->data << endl;
			input(subtree->LeftChild);
			input(subtree->RightChild);
		}
		else subtree=NULL;
	}
	BinTreeNode*& getRoot() {
		return root;
	}
private:
	BinTreeNode* root;
};

引用&!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值