树与二叉树

  • 树是一种非线性结构
  1. 体现一对多的关系
  2. 常应用于目录树、族谱、文件系统、决策树等
  3. 用于表达层级分类关系
  4. 树分为有序树和无序树:
    有序树:相对次序不可随意更换
    无序树:相对次序可随意更换
  • 线索二叉树
  1. 目的:加快查找结点的前驱或后继的速度
  2. 将空指针改为线索:
    若结点pre原来右指针为空,改为指向结点p的右线索
    若结点p原来左指针为空,改为指向结点pre的左线索
  • 二叉树的遍历
  1. 树的定义是递归的,因此对二叉树可实现递归遍历
  2. 先序遍历:根->左->右
    中序遍历:左->根->右
    后序遍历:左->右->根
  3. 用栈将递归的中序遍历改为非递归
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);
};
posted @ 2021-04-30 15:33  七棋  阅读(99)  评论(0编辑  收藏  举报