实现以下树的代码
#include<iostream>
using namespace std;
struct BTNode {
char data;
struct BTNode* pLchild;
struct BTNode* pRchild;
};
BTNode* CreatBTree();
void PreTraverseBTree(BTNode*);
void InTraverseBTree(BTNode*);
void PostTraverseBTree(BTNode*);
int main() {
BTNode* pT = CreatBTree();
cout << "先序遍历:";
PreTraverseBTree(pT);
cout << "\n";
cout << "中序遍历:";
InTraverseBTree(pT);
cout << "\n";
cout << "后序遍历:";
PostTraverseBTree(pT);
return 0;
}
BTNode* CreatBTree() {
BTNode* pA = new BTNode();
BTNode* pB = new BTNode();
BTNode* pC = new BTNode();
BTNode* pD = new BTNode();
BTNode* pE = new BTNode();
pA->data = 'A';
pB->data = 'B';
pC->data = 'C';
pD->data = 'D';
pE->data = 'E';
pA->pLchild = pB;
pA->pRchild = pC;
pB->pLchild = pB->pRchild = NULL;
pC->pLchild = pD;
pC->pRchild = NULL;
pD->pRchild = pE;
pD->pLchild = NULL;
pE->pLchild = pE->pRchild = NULL;
return pA;
}
void PreTraverseBTree(BTNode *pT) {
if (pT != NULL) {
cout << pT->data << " ";
PreTraverseBTree(pT->pLchild);
PreTraverseBTree(pT->pRchild);
}
}
void InTraverseBTree(BTNode*pT)
{
if (pT != NULL) {
InTraverseBTree(pT->pLchild);
cout << pT->data << " ";
InTraverseBTree(pT->pRchild);
}
}
void PostTraverseBTree(BTNode* pT)
{
if (pT != NULL) {
PostTraverseBTree(pT->pLchild);
PostTraverseBTree(pT->pRchild);
cout << pT->data << " ";
}
}
#include<iostream>
using namespace std;
#include<vector>
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode() : val(0), left(nullptr), right(nullptr) {}
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
TreeNode(int x, TreeNode* left, TreeNode* right) : val(x), left(left), right(right) {}
};
TreeNode* dfs(vector<int>& preorder, vector<int>& inorder, int h1, int t1, int h2, int t2) {
if (h1 > t1 || h2 > t2)
return NULL;
TreeNode* root = new TreeNode(preorder[h1]);
if (h1 == t1)
return root;
int mid = 0;
while (inorder[h2 + mid] != root->val)
mid++;
root->left = dfs(preorder, inorder, h1 + 1, h1 + mid, h2, h2 + mid - 1);
root->right = dfs(preorder, inorder, h1 + mid + 1, t1, h2 + mid + 1, t2);
return root;
}
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
int n = preorder.size();
if (n == 0)
return NULL;
return dfs(preorder, inorder, 0, n - 1, 0, n - 1);
}
void PreTraverseBTree(TreeNode*root) {
if (root != NULL) {
cout << root->val << " ";
PreTraverseBTree(root->left);
PreTraverseBTree(root->right);
}
}
void InTraverseBTree(TreeNode* root) {
if (root != NULL) {
InTraverseBTree(root->left);
cout << root->val << " ";
InTraverseBTree(root->right);
}
}
void PostTraverseBTree(TreeNode* root) {
if (root != NULL) {
PostTraverseBTree(root->left);
PostTraverseBTree(root->right);
cout << root->val << " ";
}
}
int main() {
vector<int> preorder = {3,9,20,15,7};
vector<int> inorder = {9,3,15,20,7};
TreeNode* root = buildTree(preorder, inorder);
PreTraverseBTree(root);
cout << "\n";
InTraverseBTree(root);
cout << "\n";
PostTraverseBTree(root);
return 0;
}