又中序遍历和后序遍历还原二叉树

根据二叉树的中序遍历和后序遍历结果,可以唯一确定一棵二叉树。题目要求设计程序,利用先序和中序遍历创建具有左右指针的二叉树。例如,给定先序序列 ABDGCEF# 和中序序列 DGBAECF#,构建对应的二叉树。

又中序遍历和后序遍历还原二叉树

根据一棵树的中序和先序遍历的结果可以还原一棵唯一的二叉树。
题目要求:
设计一个程序,根据二叉树的先根序列和中根序列创建一棵用左右指针表示的二叉树
例如:先根序列为 ABDGCEF#, 中根序列为 DGBAECF# (#表示结束)。然后用程序构造一棵二叉树。
思路:

流程图
MY CODE


#include<iostream>
#include<stdio.h>
#include<string>
#include<algorithm>
using namespace std;
string preorder = "";
string inorder = "";
//node of binary tree
struct Node{
   
   
	char val;
	Node *left, *right;
};

//display an binary tree by postorder
void display(Node *n){
   
   
	if (n == NULL) return;
	if (n->left != NULL) display(n->left);
	if (n->right != NULL) display(n->right);
	cout
序遍历(Preorder Traversal)序遍历(Inorder Traversal)通常用于构建二叉树,尤其是当给定的是两个遍历序列时。下面是一个简单的C++示例,展示了如何利用这两个遍历顺序来重构二叉树并计算其相应的遍历结果: ```cpp // 假设我们有先序遍历pre[]序遍历in[]作为输入 // 定义二叉树节点结构 struct TreeNode { int val; TreeNode* left; TreeNode* right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; // 通过先序遍历重建二叉树 TreeNode* buildTree(vector<int>& pre, vector<int>& in, int start, int end) { if (start > end) return nullptr; // 先序遍历的第一个元素是当前节点 TreeNode* root = new TreeNode(pre[start]); // 找到该节点在中序遍历中的位置 int index = find(in.begin(), in.end(), pre[start]); // 中序遍历的剩余部分用于左右子树的创建 int leftEnd = index - 1; int rightStart = index + 1; // 分别递归地构建左子树右子树 root->left = buildTree(pre, in, start + 1, leftEnd); root->right = buildTree(pre, in, rightStart, end); return root; } // 先序遍历、中序遍历后序遍历的实现 void printPreOrder(TreeNode* root) { if (root != nullptr) { cout << root->val << " "; printPreOrder(root->left); printPreOrder(root->right); } } void printInOrder(TreeNode* root) { if (root != nullptr) { printInOrder(root->left); cout << root->val << " "; printInOrder(root->right); } } void printPostOrder(TreeNode* root) { if (root != nullptr) { printPostOrder(root->left); printPostOrder(root->right); cout << root->val << " "; } } int main() { // 假设你已经有了prein数组,这里省略实际调用 auto treeRoot = buildTree(pre, in, 0, pre.size() - 1); // 输出先序遍历、中序遍历后序遍历的结果 cout << "Preorder traversal: "; printPreOrder(treeRoot); cout << "\nInorder traversal: "; printInOrder(treeRoot); cout << "\nPostorder traversal: "; printPostOrder(treeRoot); return 0; }[^1] ``` 在这个代码中,`buildTree()`函数负责根据序遍历序遍历构建二叉树,而`printPreOrder()`, `printInOrder()`, `printPostOrder()` 函数则分别用于打印不同遍历方式下的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值