存储

/**
 * 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;
    }
};
posted @ 2023-02-25 20:27  小麟qwq  阅读(17)  评论(0)    收藏  举报