二叉树的建立、中序遍历(用C语言实现)
发布网友
发布时间:2022-05-05 19:23
我来回答
共3个回答
热心网友
时间:2022-04-18 21:39
#include "iostream.h"
//#include "exception.h"
//树节点类
int count=0,mode=0,data=0;
class BinaryTreeNode
{
friend class BinaryTree;
public :
BinaryTreeNode()
{
LeftChild = RightChild = 0;
}
BinaryTreeNode(const int& e)
{
data = e;
LeftChild = RightChild = 0;
}
BinaryTreeNode(const int& e, BinaryTreeNode *l,BinaryTreeNode *r)
{
data = e;
LeftChild = l;
RightChild = r;
}
private :
int data;
BinaryTreeNode *LeftChild, //左子树
*RightChild; // 右子树
} ;
class BinaryTree
{
friend class BinaryTreeNode;
public :
BinaryTree( )
{
root = 0;
}
~ BinaryTree( ) { }
bool IsEmpty( ) const
{
return ((root) ? false : true);
}
bool Root(int& x) const
{// 取根节点的d a t a域,放入x
// 如果没有根节点,则返回f a l s e
if (root)
{
x = root->data;
return true;
}
else return false; // 没有根节点
}
void MakeTree(const int& element)
{
root = new BinaryTreeNode (element);
}
void MakeTree(const int& element,BinaryTree& left,BinaryTree& right)
{// 将left, right和element 合并成一棵新树
// left, right和this必须是不同的树
// 创建新树
root = new BinaryTreeNode (element, left.root, right.root);
// 阻止访问l e f t和r i g h t
left.root = right.root = 0;
}
void Inorder(void (*Visit) (BinaryTreeNode *u))
{
InOrder ( Visit,root ) ;
}
void Delete( )
{
PostOrder (Free,root);
root = 0;
}
private :
BinaryTreeNode *root; // 根节点指针
static void Free(BinaryTreeNode *t)
{
delete t;
}
void InOrder(void(*Visit) (BinaryTreeNode *u),BinaryTreeNode *t)
{// 中序遍历
if (t)
{
InOrder(Visit, t->LeftChild);
Visit( t ) ;
InOrder( Visit, t->RightChild);
}
}
热心网友
时间:2022-04-18 22:57
课本上不是有吗?我不大明白为什么有很多人来这里求程序,有意思吗?
热心网友
时间:2022-04-19 00:31
自己写