树的定义:
树是n个结点的有限集。 n=O 时称为空树。 在任意-棵非空树中: ( 1 )有且仅有一·个特定的根结点: (2)若干子树(互不相交)
树的定义是递归定义的
二叉树( Binary Tree) 是 n个结点的有限集合,该集合或者为空集(称为空二叉树),戴者由一个根结点和两颗互不相交的、分别称为根结点的左子树和右子树的二叉树组成 。
二叉树结点的定义:
typedef char elemtype;
typedef struct BtNode
{
elemtype data;
BtNode *leftchild;
BtNode *rightchild;
}BtNode,*BinaryTree;
下图二叉树的遍历:
先根遍历: ABCDEFGH
中根遍历:CBEDFAGH
后根遍历 : CEFDBHGA
二叉树的创建:
BtNode * creat_tree()
{
elemtype x;
cin>>x;
BtNode *p = NULL;
if (x != '#')
{
p = Buynode();
p->data = x;
p->leftchild = creat_tree();
p->rightchild = creat_tree();
}
return p;
}
字符'#'表示左孩子或右孩子为空。先创建根结点,在递归创建左子树和右子树
二叉树遍历:
//先序遍历二叉树
void PreOrder(BtNode *ptree)
{
if (ptree != NULL)
{
cout<<ptree->data<<" ";
PreOrder(ptree->leftchild);
PreOrder(ptree->rightchild);
}
}
//中序遍历二叉树
void InOrder(BtNode *ptree)
{
if (ptree != NULL)
{
InOrder(ptree->leftchild);
cout<<ptree->data<<" ";
InOrder(ptree->rightchild);
}
}
//后序遍历二叉树
void PastOrder(BtNode *ptree)
{
if (ptree != NULL)
{
PastOrder(ptree->leftchild);
PastOrder(ptree->rightchild);
cout<<ptree->data<<" ";
}
}
测试代码:
void main()
{
BinaryTree tree1;
tree1 = creat_tree();
PreOrder(tree1);
cout<<endl;
InOrder(tree1);
cout<<endl;
PastOrder(tree1);
}
测试结果如图: