目录
二叉树
定义:
二叉树是每个结点最多有两个子树的树结构。它有五种基本形态:二叉树可以是空集;根可以有空的左子树或右子树;或者左、右子树皆为空。
struct node{ char str; struct node* l; struct node* r; }T;
特点:
1、每个节点最多有两棵子树
2、二叉树的子树有左右之分
二叉树的创建:
void creat(struct node*T)//创建二叉树
{
char ch;
cin>>ch;
if(ch=='#')
T=NULL;
else
{
T=new node;//开辟空间
T->str=ch;//节点赋值
creat(T->l );//递归创建左孩子
creat(T->r );//递归创建右孩子
}
}
二叉树的遍历:
先序遍历:
访问根,左子树,右子树
void dlr(struct node *T)//先序遍历——根左右
{
if(T==NULL) return ;
cout<<T->str ;//输出根节点
dlr(T->l );//递归输出左节点
dlr(T->r );//递归输出右节点
}
中序遍历:
访问左子树,根,右子树
void ldr(struct node *T)//中序遍历——左根右
{
if(T==NULL) return ;
ldr(T->l );//递归输出左节点
cout<<T->str ;//输出根节点
ldr(T->r );//递归输出右节点
}
后序遍历:
访问左子树,右子树,根
void lrd(struct node *T)//后序遍历——左右根
{
if(T==NULL) return ;
lrd(T->l );//递归输出左节点
lrd(T->r );//递归输出右节点
cout<<T->str ;//输出根节点
}