二叉树的基本定义和遍历:
#include<iostream>
using namespace std;
template <class T>
struct TreeNode {
Tdata;
TreeNode<T>*left;
TreeNode<T>*right;
TreeNode(constT &data=0)
:data(data)
,left(NULL)
,right(NULL)
{}
};
template <class T>
class BinaryTree {
typedefTreeNode<T> Node;
private:
Node*root;
private:
Node*CreateTree(const T *arr, const int &len, const T &inval, int &i)
{
Node*cur = NULL;
if(arr[i] == inval || i >= len)
{
returncur;
}
cur= new Node(arr[i]);
cur->left= CreateTree(arr, len,inval, ++i);
cur->right= CreateTree(arr, len,inval, ++i);
returncur;
}
voidpreorder(Node *cur)
{
if(cur == NULL)
{
return;
}
cout<< cur->data << " ";
preorder(cur->left);
preorder(cur->right);
}
voidinorder(Node *cur)
{
if(cur == NULL)
{
return;
}
inorder(cur->left);
cout<< cur->data << " ";
inorder(cur->right);
}
voidlastorder(Node *cur)
{
if(cur == NULL)
{
return;
}
lastorder(cur->left);
lastorder(cur->right);
cout<< cur->data << " ";
}
public:
BinaryTree()
:root(NULL)
{}
BinaryTree(constT *arr,const int &len,const T &inval)
{
inti = 0;
root= CreateTree(arr, len, inval, i);
}
void_preorder()//前序遍历
{
preorder(root);
}
void_inorder()//中序遍历
{
inorder(root);
}
void_lastorder()//后序遍历
{
lastorder(root);
}
};
void testTree()
{
intarr[] = { 25,56,17,'#','#',26,'#','#',15,32,89,'#','#',66,};
BinaryTree<int>Tree(arr,sizeof(arr)/sizeof(arr[0]),'#');
Tree._preorder(); cout << endl;
Tree._inorder(); cout << endl;
Tree._lastorder(); cout << endl;
}
int main()
{
testTree();
return 0;
}