vector

重建二叉树

https://www.nowcoder.com/practice/8a19cbe657394eeaac2f6ea9b0f6fcf6?tpId=13&tqId=11157&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

/**
 * 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(pre.size()==0) return NULL;
        TreeNode *root=new TreeNode(pre[0]);
        int i;
        for(i=0;i<vin.size();i++)
        {
            if(vin[i]==pre[0])
                break;
        }
        root->left=reConstructBinaryTree(vector<int>(pre.begin()+1,pre.begin()+i+1),vector<int>(vin.begin(),vin.begin()+i));
        root->right=reConstructBinaryTree(vector<int>(pre.begin()+i+1,pre.end()),vector<int>(vin.begin()+i+1,vin.end()));
        return root;
    }
};

关于树的操作一般是递归
根据前序序列和中序序列找到根结点,再把左右两棵子树当作二叉树,递归找根节点
对于中序序列,根节点左边是它的左子树,右边是它的右子树,因此找到根节点后可以得知左右子树的中序序列,而对于前序序列,左子树结点总在右子树结点之前,因此也可以找到左右子树的前序序列

vector.end()指向最后一个元素的下一个位置
vector 有个构造函数
vector<int> vec1=vector<int>(vec2.bdgin(),vec2.end());</int></int>

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务