C语言 二叉树 遍历问题
前序 中序 后序 什么意思???除了根节点以外分3行??第一行是前序 2中序 3后序????...
前序 中序 后序 什么意思???除了 根节点以外 分3行??第一行是前序 2中序 3后序????
展开
5个回答
展开全部
并不是你所说的那样。
首先我们要知道遍历是为了让二叉树的所有结点都扫描一遍,而前中后,三个遍历方式,说的是他的显示顺序。
前序的特点:我们注意研究一下前序遍历的结果,你会发现,对于每个二叉树(只有根结点,左结点,右结点。一棵树,是一个个小的二叉树组成)在结果中,你都会发现,根结点必定在左结点前。你可以认真看看,就算,是子树中也是根结点在左结点前。(比如,左结点成了另一个子树的根结点,这个左结点对应的上一级根结点,也会显示在这个左结点之前)
中序的特点:经过前序遍历的分析 ,我们可以直接得出,中序遍历结果中,每个根结点都会放在左结点和右结点中间。当然发生如,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);
}
}
说那么多,我自己也复习下,哈哈
首先我们要知道遍历是为了让二叉树的所有结点都扫描一遍,而前中后,三个遍历方式,说的是他的显示顺序。
前序的特点:我们注意研究一下前序遍历的结果,你会发现,对于每个二叉树(只有根结点,左结点,右结点。一棵树,是一个个小的二叉树组成)在结果中,你都会发现,根结点必定在左结点前。你可以认真看看,就算,是子树中也是根结点在左结点前。(比如,左结点成了另一个子树的根结点,这个左结点对应的上一级根结点,也会显示在这个左结点之前)
中序的特点:经过前序遍历的分析 ,我们可以直接得出,中序遍历结果中,每个根结点都会放在左结点和右结点中间。当然发生如,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);
}
}
说那么多,我自己也复习下,哈哈
展开全部
三种顺序讲的是遍历时根节点,左子节点,右子节点的先后顺序,前序顺序是根节点,左子节点,右子节点,中序是左子节点,根节点,右子节点,后序是左子节点,右子节点,根节点,楼主应该看出来了吧,前、中、后分别指的就是根节点在三种遍历中顺序位置,如果楼主不太了解遍历,还是要去仔细研究下算法。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
前中后序你可以理解成访问根的前中后
前序:先根后左再右,如果左右是子树,则重复根左右的顺序
中序:先左后根再右,这个就复杂一点,你首先要看左或右是否是子树,如果是,则要先按中序遍历子树
后序:先左后右再根,如果左右是子树,则先按后序遍历子树,最后访问相应子树的根
前序:先根后左再右,如果左右是子树,则重复根左右的顺序
中序:先左后根再右,这个就复杂一点,你首先要看左或右是否是子树,如果是,则要先按中序遍历子树
后序:先左后右再根,如果左右是子树,则先按后序遍历子树,最后访问相应子树的根
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
前序顺序是根节点,左节点,右节点,中序是左节点,根节点,右节点,后序是左节点,右节点,根节点。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
撒旦法斯蒂芬
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询