二叉树——已知中序和前序,重构二叉树

重建二叉树

http://www.nowcoder.com/questionTerminal/8a19cbe657394eeaac2f6ea9b0f6fcf6

/**
 * Definition for binary tree
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> vin) {
        if(vin.size()==0)return NULL;
        vector<int> pre_left,pre_right,vin_left,vin_right;
        int i = 0;
        for (int ii = 0;ii<vin.size();ii++)
        {
            if(vin[ii]==pre[0])
            {
                i = ii;
                break;
            }
        }
        //i已经找到
        for(int j = 0;j<i;j++)
        {
            vin_left.push_back(vin[j]);
            pre_left.push_back(pre[j+1]);//这里是代表第一位是根节点
        }
        for(int j=i+1;j<vin.size();j++)
        {
            vin_right.push_back(vin[j]);
            pre_right.push_back(pre[j]);
        }
        TreeNode* result = new TreeNode(pre[0]);
        result->left = reConstructBinaryTree(pre_left,vin_left);
        result->right = reConstructBinaryTree(pre_right,vin_right);
        return result;
    }
};

图片说明
前序:根左右
中序:左根右
后序:左右根
思路:
①首先找到前序的第一个,也就是整个二叉树的根
②再找到中序序列中的这个点,以此分界,左为左子树的中序序列,右为右子树的中序序列
③在前序中,刨除第一个根节点,剩下也按此分开,左为左子树的前序序列
④递归
结果:
已知后序和中序也可以
已知前序和后序不唯一:当一个根只有一颗子树时,通过前序遍历和后序遍历,无法确定该子树是这个根的左子树还是右子树

全部评论

相关推荐

点赞 评论 收藏
分享
牛客279957775号:铁暗恋
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务