LeetCode每日一题 (25) 106. 从中序与后序遍历序列构造二叉树

106. 从中序与后序遍历序列构造二叉树


在这里插入图片描述
题解:

/**
 * 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:
    TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {
        TreeNode* root;
        if(inorder.size()!=0){
            root=createTree(inorder,postorder,0,postorder.size()-1,0,inorder.size()-1);
        } 
        return root;
    }
    // poststart、postend、instart、inend分别表示后序和中序的开始和结束位置;
    // 方法:就是利用中序和后序序列的规律,可以自己画图理解
    TreeNode* createTree(vector<int>& inorder, vector<int>& postorder,int poststart,int postend,int instart,int inend){
        TreeNode* root = new TreeNode();
        root->val=postorder[postend];
        root->left=nullptr;
        root->right=nullptr;
        int p=instart;
        while(inorder[p]!=postorder[postend]) p++;
        int count=p-instart; //纪录移动的个数,也就是左子树的节点个数
        if(p!=instart){// 说明左子树不为空
            root->left=createTree(inorder,postorder,poststart,poststart+count-1,instart,p-1);
        }
        if(p!=inend){// 说明右子树不为空
            root->right=createTree(inorder,postorder,poststart+count,postend-1,p+1,inend);
        }
        return root;
    }
};

在这里插入图片描述

©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页