递归实现二叉树
对于二叉树的实现主要运用递归进行实现,代码如下:
#include
template
struct BinaryTreeNode
{
T _data;
BinaryTreeNode
BinaryTreeNode
BinaryTreeNode(const T&x)
:_data(x)
, _left(NULL)
, _right(NULL)
{}
};
template
class BinaryTree
{
protected:
BinaryTreeNode
BinaryTreeNode
{
BinaryTreeNode
if (index < size && a[index] != invalid)
{
root = new BinaryTreeNode
root->_left = _creattree(a, size, ++index, invalid);
root->_right = _creattree(a, size, ++index, invalid);
}
return root;
}
void _prevorder(const BinaryTreeNode
{
if (root == NULL)
return;
cout << root->_data << " ";
_prevorder(root->_left);
_prevorder(root->_right);*/
}
void _inorder(const BinaryTreeNode
{
if (root == NULL)
return;
_inorder(root->_left);
cout << root->_data<<" ";
_inorder(root->_right);
}
void _postorder(const BinaryTreeNode
{
if (root == NULL)
return;
_postorder(root->_left);
_postorder(root->_right);
cout << root->_data << " ";
}
size_t _leafsize(const BinaryTreeNode
{
if (root == NULL)
return 0;
if (root->_left == NULL && root->_right == NULL)
return 1;
return _leafsize(root->_left) + _leafsize(root->_right);
}
size_t _size(const BinaryTreeNode
{
if (root == NULL)
return 0;
return _size(root->_left) + _size(root->_right) + 1;
}
size_t _Depth(const BinaryTreeNode
{
if (root == NULL)
return 0;
int left = _Depth(root->_left);
int right = _Depth(root->_right);
return left > right ? left + 1 : right + 1;
}
public:
BinaryTree(T const*a = "", size_t size = 0)
{
size_t index = 0;
_root = _creattree(a, size, index, '#');
}
void prevorder()
{
_prevorder(_root);
}
void inorder()
{
_inorder(_root);
}
void postorder()
{
_postorder(_root);
}
size_t size()
{
int count = _size(_root);
return count;
}
size_t leafsize()
{
int count = _leafsize(_root);
return count;
}
size_t Depth()
{
int depth = _Depth(_root);
return depth;
}
};
void test()
{
BinaryTree
/*b.levelorder();*/
/*BinaryTree
b1 = b;*/
/*cout< /*cout << b.size();*/ b.postorder(); /*cout << b.leafsize();*/ } int main() { test(); getchar(); return 0; }