请教一下数据结构 二叉树的先序遍历 中序遍历 后序遍历 是怎么弄的

后续遍历怎么是debfca 呢
2024-11-15 17:39:16
推荐回答(5个)
回答1:

所谓先序、中序和后序的区别在于访问根的时机,分别是BLR、LBR和LRB,其中B、L、R分别表示根结点、根结点的左子树和根结点的右子树。
以后序遍历为例进行讲解。

后序遍历算法:
(1) 后序遍历根结点的左子树;
(2) 后序遍历根结点的右子树。
(3) 访问二叉树的根结点;

你的方法是将树分解为根、左子树、右子树,再将子树继续按前述方法分解,直至每一部分只剩一个结点或空为止。

对该图,分解为
根(a),根的左子树(bde,不分先后),根的右子树(cf,不分先后)
故后序的基本顺序是(bde)、(cf)、(a)

同样的道理,对(bde)和(cf)也进行分解:
根(b)、左子树(d)、右子树(e) 后序的基本顺序是deb
根(c)、左子树(空)、右子树(f) 后序的基本顺序是fc

整合起来就是:d e b f c a

回答2:

后序遍历就是:
后序遍历左子树
后序遍历右子树
输出根节点
如图举例就是:
左子树为bde三个节点
。。左子树的左子树为d
。。左子树的右子树为e
。。左子树的根为b
左子树后序遍历为deb。

右子树为fc两个节点
。。右子树的左子树不存在
。。右子树的右子树为f
。。右子树的根为c
右子树后序遍历为fc

整个树的根为a

所以就是 debfca

回答3:

先序遍历 根左右abdecf
中序遍历 左根右dbeacf
后序遍历 左右根debfca
后序,你先看左枝,最左面的是d,接着在d右边的是e,而d和e是b的分支,按照“左右根”的顺序,就是deb,然后以此类推,看a的右分支,f是c的右分支,写下来就是fc,然后再根据“左右根”,结果就是debfca

回答4:

无论是先中后序遍历,对于子节点都是先左节点后右节点的,后序遍历是先遍历子节点,
则开始找a的左边,再找b的左边 d 右边e 接着b 这样a的左边遍历完 再遍历右边先遍历c的子节点f 再c 最后根节点a 则就是debfca

回答5:

后序遍历是:左、右、根
即,先遍历左结点,再遍历右结点,再遍历根结点
根据你的图
先遍历a的左结点,由于a的左结点b还有左结点,所以就先遍历到d了,然后就是b的右结点
算法可以如下设计:

void PostOrder(BTNode *r)
{
if(r != NULL)
{
PostOrder(r->lchild);
PostOrder(r->rchild);
cout << r->data << " ";
}
}