计算机考研专业课复习科目包括数据结构、操作系统、计算机组成原理、计算机网络四门课程。其中数据结构这一科目兼具理论与实践,要求同学们在复习过程中不仅要对教材的基本概念进行记忆,同时还要结合知识点掌握相应的实际操作知识。为帮助同学们在计算机专业课复习上卓有成效,中公考研将为同学们整理全面的考点梳理,今天为大家带来的是数据结构的相关内容,请同学们适当参考,结合自身实际在全面复习的基础上进行重点理解记忆。
例题:假设二叉树采用链式存储结构进行存储,root^为根结点,p^为任一给定的结点,
写出求从根结点到p^之间路径的非递归算法。
[题目分析]采用后序非递归遍历二叉树,栈中保留从根结点到当前结点的路径上所有结点。
void PrintPath(BiTree bt,p) //打印从根结点bt到结点p之间路径上的所有结点
{
BiTree q=bt,s[]; //s是元素为二叉树结点指针的栈,容量足够大
int top=0; tag[];//tag数组元素值为0或1,访问左、右子树标志,tag和s同步
if (q==p)
{ printf(q->data);
return;
} //根结点就是所找结点
while(q!=null || top>0)
{
while(q!=null) //左子女入栈,并置标记
if(q==p) //找到结点p,栈中元素均为结点p 的祖先
{ printf(“从根结点到p结点的路径为\n”);
for(i=1;i<=top;i++)
printf(s[i]->data);
printf(q->data);
return;
}
else
{ s[++top]=q;
tag[top]=0;
q=q—>lchild;
} //沿左分支向下
while(top>0 && tag[top]==1))
top--;//本题不要求输出遍历序列,这里只退栈
if (top>0)
{ q=s[top];
q=q->rchild;
tag[top]=1;
} //沿右分支向下
}//while(q!=null || top>0)
}//结束算法PrintPath
按层次遍历二叉树