TreeNode* buildTreeFrom(vector<int>& arr, int start){
     if(start >= arr.size() || arr[start] == -1)
         return NULL;
     TreeNode* root = new TreeNode(arr[start]);
     root->left = buildTreeFrom(arr, (start + 1) * 2 - 1);
     root->right = buildTreeFrom(arr, (start + 1) * 2 );
     return root;
 }
 TreeNode* buildTreeFrom(vector<int>& inorder, int instart, int inend, vector<int>& postorder, int posstart, int posend, map<int,int>& record){
     if(instart > inend || posstart > posend)
         return NULL;
     
     TreeNode* root = new TreeNode(postorder[posend]);
     int index = record[postorder[posend]];
     
     root->left = buildTreeFrom(inorder, instart, index - 1, postorder, posstart, posstart + index - instart - 1, record);
     root->right = buildTreeFrom(inorder, index + 1, inend, postorder, posstart + index - instart, posend - 1, record);
     return root;
     
 }
예제 #3
0
bool ProjectPanel::buildTreeFrom(TiXmlNode *projectRoot, HTREEITEM hParentItem)
{
    for (TiXmlNode *childNode = projectRoot->FirstChildElement();
            childNode ;
            childNode = childNode->NextSibling())
    {
        const TCHAR *v = childNode->Value();
        if (lstrcmp(TEXT("Folder"), v) == 0)
        {
            HTREEITEM addedItem = _treeView.addItem((childNode->ToElement())->Attribute(TEXT("name")), hParentItem, INDEX_CLOSED_NODE);
            if (!childNode->NoChildren())
            {
                bool isOK = buildTreeFrom(childNode, addedItem);
                if (!isOK)
                    return false;
            }
        }
        else if (lstrcmp(TEXT("File"), v) == 0)
        {
            const TCHAR *strValue = (childNode->ToElement())->Attribute(TEXT("name"));
            generic_string fullPath = getAbsoluteFilePath(strValue);
            TCHAR *strValueLabel = ::PathFindFileName(strValue);
            int iImage = ::PathFileExists(fullPath.c_str())?INDEX_LEAF:INDEX_LEAF_INVALID;
            _treeView.addItem(strValueLabel, hParentItem, iImage, fullPath.c_str());
        }
    }
    return true;
}
 TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {
     if(inorder.size() == 0)
         return NULL;
     
     map<int,int> record;
     for(int i = 0; i < inorder.size(); ++ i){
         record[inorder[i]] = i;
     }
     return buildTreeFrom(inorder, 0, (int)inorder.size() - 1, postorder, 0, (int)postorder.size() - 1, record);
 }
예제 #5
0
bool ProjectPanel::openWorkSpace(const TCHAR *projectFileName)
{
    TiXmlDocument *pXmlDocProject = new TiXmlDocument(projectFileName);
    bool loadOkay = pXmlDocProject->LoadFile();
    if (!loadOkay)
        return false;

    TiXmlNode *root = pXmlDocProject->FirstChild(TEXT("NotepadPlus"));
    if (!root)
        return false;


    TiXmlNode *childNode = root->FirstChildElement(TEXT("Project"));
    if (!childNode)
        return false;

    if (!::PathFileExists(projectFileName))
        return false;

    _treeView.removeAllItems();
    _workSpaceFilePath = projectFileName;

    NativeLangSpeaker *pNativeSpeaker = (NppParameters::getInstance())->getNativeLangSpeaker();
    generic_string workspace = pNativeSpeaker->getAttrNameStr(PM_WORKSPACEROOTNAME, "ProjectManager", "WorkspaceRootName");
    HTREEITEM rootItem = _treeView.addItem(workspace.c_str(), TVI_ROOT, INDEX_CLEAN_ROOT);

    for ( ; childNode ; childNode = childNode->NextSibling(TEXT("Project")))
    {
        HTREEITEM projectItem = _treeView.addItem((childNode->ToElement())->Attribute(TEXT("name")), rootItem, INDEX_PROJECT);
        buildTreeFrom(childNode, projectItem);
    }
    setWorkSpaceDirty(false);
    _treeView.expand(rootItem);

    delete pXmlDocProject;
    return loadOkay;
}
 void test(vector<int> arr, int expected){
     TreeNode* root = buildTreeFrom(arr, 0);
     Solution sln;
     int actual = sln.sumNumbers(root);
     ASSERT_EQ(expected, actual);
 }