代码实现:
//二叉树
#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;
};
引用&!!!