- 体现一对多的关系
- 常应用于目录树、族谱、文件系统、决策树等
- 用于表达层级分类关系
- 树分为有序树和无序树:
有序树:相对次序不可随意更换
无序树:相对次序可随意更换
- 目的:加快查找结点的前驱或后继的速度
- 将空指针改为线索:
若结点pre原来右指针为空,改为指向结点p的右线索
若结点p原来左指针为空,改为指向结点pre的左线索
- 树的定义是递归的,因此对二叉树可实现递归遍历
- 先序遍历:根->左->右
中序遍历:左->根->右
后序遍历:左->右->根
- 用栈将递归的中序遍历改为非递归
void InOrder(BiTree t)//中序遍历的递归算法
{
if(t){
InOrder(t->lchild);
cout << t->data;
InOrder(t->rchild);
}
}
void InOrderl(BTNode *b)//二叉树中序遍历的非递归算法,算法需要借助一个栈
{
BTNode *p;
SqStack *st;
InitStack(st);
p=b;
while(!StackEmpty(st)||p!=NULL)
{ while(p!=NULL)
{ Push(st,p);
p=p->lchild;
}
if(!StackEmpty(st))
{
Pop(st,p);
printf("%c",p->data);
p=p->rchild;
}
}
printf("\n");
DestoryStack(st);
};