C语言 二叉树 遍历问题

前序 中序 后序 什么意思???除了根节点以外分3行??第一行是前序  2中序  3后序????... 前序  中序  后序  什么意思???除了 根节点以外 分3行??第一行是前序   2中序   3后序???? 展开
 我来答
夏夜轻语
2012-07-17 · TA获得超过1111个赞
知道小有建树答主
回答量:523
采纳率:100%
帮助的人:283万
展开全部
并不是你所说的那样。
首先我们要知道遍历是为了让二叉树的所有结点都扫描一遍,而前中后,三个遍历方式,说的是他的显示顺序。

前序的特点:我们注意研究一下前序遍历的结果,你会发现,对于每个二叉树(只有根结点,左结点,右结点。一棵树,是一个个小的二叉树组成)在结果中,你都会发现,根结点必定在左结点前。你可以认真看看,就算,是子树中也是根结点在左结点前。(比如,左结点成了另一个子树的根结点,这个左结点对应的上一级根结点,也会显示在这个左结点之前)

中序的特点:经过前序遍历的分析 ,我们可以直接得出,中序遍历结果中,每个根结点都会放在左结点和右结点中间。当然发生如,A的左结点是B,B的右结点是C,时中序遍历结果会是
BCA,虽然A未在中间,但我们要分析,对于A是根结点,左结点B在其前面,对于B是根结点,右结点C在其后面。这符合根结点在左右结点中间的特点。

后序的特点:是先遍历左右结点,才返回来遍历根结点。参照前序和中序,就能明白

最后要注意的,可能 你也发现了,左结点的遍历一定在右结点前。

下面附上遍历的递归算法
/*1 、前序遍历二叉树的递归算法 */
void preorder(bintree t)
{
if (t) {
printf("%c",t->data);
preorder(t->lchild);
preorder(t->rchild);
}
}
/*2 、中序遍历二叉树的递归算法 */
void inorder(bintree t)
{
if (t) {
inorder(t->lchild);
printf("%c",t->data);
inorder(t->rchild);
}
}
/*3 、后序遍历二叉树的递归算法 */
void postorder(bintree t)
{
if (t) {
postorder(t->lchild);
postorder(t->rchild);
printf("%c",t->data);
}
}

说那么多,我自己也复习下,哈哈
yanfeng0107
2012-07-17 · 超过10用户采纳过TA的回答
知道答主
回答量:101
采纳率:0%
帮助的人:23万
展开全部
三种顺序讲的是遍历时根节点,左子节点,右子节点的先后顺序,前序顺序是根节点,左子节点,右子节点,中序是左子节点,根节点,右子节点,后序是左子节点,右子节点,根节点,楼主应该看出来了吧,前、中、后分别指的就是根节点在三种遍历中顺序位置,如果楼主不太了解遍历,还是要去仔细研究下算法。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
superdzm722
2012-07-17 · 超过36用户采纳过TA的回答
知道小有建树答主
回答量:100
采纳率:0%
帮助的人:73.1万
展开全部
前中后序你可以理解成访问根的前中后
前序:先根后左再右,如果左右是子树,则重复根左右的顺序
中序:先左后根再右,这个就复杂一点,你首先要看左或右是否是子树,如果是,则要先按中序遍历子树
后序:先左后右再根,如果左右是子树,则先按后序遍历子树,最后访问相应子树的根
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
金戈liujian
2012-07-17 · 超过21用户采纳过TA的回答
知道答主
回答量:83
采纳率:0%
帮助的人:32.2万
展开全部
前序顺序是根节点,左节点,右节点,中序是左节点,根节点,右节点,后序是左节点,右节点,根节点。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lizhuchang
2012-07-17 · TA获得超过117个赞
知道答主
回答量:304
采纳率:0%
帮助的人:122万
展开全部
撒旦法斯蒂芬
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式