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; }
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); }
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); }