树
存储
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
前序
void prebuild(node * root){
if(root!=NULL){
printf("%c",root->value);
prebuild(root->l);
prebuild(root->r);
}
}
中序
void inbuild(node * root){
if(root!=NULL){
inbuild(root->l);
printf("%c",root->value);
inbuild(root->r);
}
}
后序
void labuild(node * root){
if(root!=NULL){
labuild(root->l);
labuild(root->r);
printf("%c",root->value);
}
}
输入一棵二叉树前序遍历和中序遍历的结果,请重建该二叉树。
注意:
二叉树中每个节点的值都互不相同;
输入的前序遍历和中序遍历一定合法;
数据范围
树中节点数量范围 [0,100]
。
样例
给定:
前序遍历是:[3, 9, 20, 15, 7]
中序遍历是:[9, 3, 15, 20, 7]
返回:[3, 9, 20, null, null, 15, 7, null, null, null, null]
返回的二叉树如下所示:
3
/ \
9 20
/ \
15 7
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
void BuildTree(int l, int r, int &t, TreeNode* &root,vector<int>& preorder, vector<int>& inorder){
int flag = -1;
for(int i=l;i<=r;i++){
if(inorder[i] == preorder[t]){
flag = i;
break;
}
}
if(flag == -1) return ;
root = new TreeNode(preorder[t]);
t++;
if(flag>l) BuildTree(l, flag-1, t, root->left, preorder, inorder);
if(flag<r) BuildTree(flag+1, r, t, root->right, preorder, inorder);
}
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
TreeNode* root;
int t = 0;
int len = preorder.size();
BuildTree(0, len-1, t, root, preorder, inorder);
return root;
}
};

浙公网安备 33010602011771号