已知二叉树的两种遍历求第三种遍历

以下面这张图为例,如果已知它的前序遍历和中序遍历,求得它的后序遍历。方法如下:

已知前序遍历为(根左右):1、2、4、8、9、5、10、3、6、7(1 2 4 8 9 5 10 3 6 7)

已知中序遍历为(左根右):8、4、9、2、10、5、1、6、3、7(8 4 9 2 10 5 1 6 3 7)

求后序遍历:首先看到前序遍历,可以得到第一个根节点为1,中序遍历中,1前面的都属于1的左节点的(即8、4、9、2、10、5为左节点,6、3、7为右节点),则2一定是1的左节点,1左边的数字在前序遍历中对应到10,则前序遍历中10以后的数字3为1的右节点。接下来的判断和判断1的左右节点的规律如出一致。

以2为根节点前序遍历为:2、4、8、9、5、10,中序遍历为:8、4、9、2、10、5

从前序遍历中判断根节点为2,从中序遍历中可以判断2存在左右节点,其左节点包括8、4、9,右节点包括10、5,接下来从前序便利中可以判断4为8、9的根节点,即2的左节点,5为2的右节点。

以1的右节点3为根节点,前序遍历为:3、6、7,中序遍历为6、3、7,节点的判断方法同上,不再赘述。

最终可以得到一整个二叉树的图,后序遍历自然也就容易得出了。

 

转载于:https://www.cnblogs.com/jincheng81/p/9213932.html

已知二叉树的先序遍历和中序遍历,可以通过以下步骤二叉树的后序遍历: 1. 首先,根据先序遍历的第一个元素确定根节点。 2. 在中序遍历中找到根节点的位置,将数组分为左子树和右子树。 3. 递归地对左子树和右子树进行相同的操作,得到它们的后序遍历。 4. 将左子树、右子树和根节点按照后序遍历的顺序连接起来。 下面是一个C语言实现的示例代码: ```c #include <stdio.h> #include <stdlib.h> typedef struct TreeNode { char val; struct TreeNode *left; struct TreeNode *right; } TreeNode; TreeNode* buildTree(char* preorder, char* inorder, int len) { if (len == 0) return NULL; TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode)); root->val = preorder[0]; int i; for (i = 0; i < len; i++) { if (inorder[i] == preorder[0]) break; } root->left = buildTree(preorder + 1, inorder, i); root->right = buildTree(preorder + i + 1, inorder + i + 1, len - i - 1); return root; } void postorderTraversal(TreeNode* root) { if (root == NULL) return; postorderTraversal(root->left); postorderTraversal(root->right); printf("%c ", root->val); } int main() { char preorder[] = {'A', 'B', 'D', 'E', 'C', 'F'}; char inorder[] = {'D', 'B', 'E', 'A', 'F', 'C'}; int len = sizeof(preorder) / sizeof(preorder[0]); TreeNode* root = buildTree(preorder, inorder, len); postorderTraversal(root); return 0; } ``` 这段代码首先定义了一个二叉树结构体`TreeNode`,然后实现了一个`buildTree`函数,该函数根据给定的先序遍历和中序遍历构建二叉树。最后,`postorderTraversal`函数用于输出二叉树的后序遍历结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值