C++根据前序和中序重建二叉树
2017-05-07 09:45
489 查看
BinaryTreeNode* ConstructCore(int* startPreorder,int* endPreorder,int* startInorder,int* endInorder){ // 前序遍历序列的第一个数字是根节点 int rootValue = startInorder[0]; BinaryTreeNode* root = new BinaryTreeNode(); root->m_nValue = rootValue; root->m_pLeft = root->m_pRight = NULL; if (startPreorder == endPreorder) { if (startInorder == endInorder && *startPreorder == *startInorder) { return root; }else{ throw std::exception("Invalid input."); } } // 在中序遍历中找到根节点 int* rootInorder = startInorder; // 如果当前指针对应的指不是根节点,那么指针向后移动一次 while(rootInorder <= endInorder && *rootInorder != rootValue){ ++ rootInorder; } // 如果遍历完中序遍历的结果之后都没有找到和前序遍历结果相同的根节点 if (rootInorder == endInorder && *rootInorder != rootValue) { throw std::exception("Invalid input."); } int leftLength = rootInorder - startInorder; int* leftPreorderEnd = startPreorder + leftLength; if (leftLength > 0) { root->m_pLeft = ConstructCore(startPreorder + 1,leftPreorderEnd,startInorder,rootInorder - 1); } if (leftLength < endPreorder - startPreorder) { root->m_pRight = ConstructCore(leftPreorderEnd + 1,endPreorder,rootInorder + 1,endInorder); } return root; }
相关文章推荐
- 剑指offer刷题之c++实现的根据二叉树的前序和中序遍历重建二叉树
- [面试] 根据前序和中序重建二叉树,并且中序非递归遍历
- 根据前序和中序重建二叉树的代码,出了错误 请指教
- 根据前序和中序重建二叉树
- 根据二叉树 前序和中序 重建原二叉树
- 根据二叉树的前序和中序序列来重建二叉树
- 【面试题】剑指Offer-6-根据前序和中序遍历重建二叉树
- Python练手之根据前序和中序&根据中序和后序重建二叉树,输出前序、中序和后序遍历结果
- 根据二叉树的先序和中序来重建二叉树-C++
- POJ 2255 根据二叉树的前序和中序序列来重建二叉树
- 根据前序和中序遍历重建二叉树
- 根据前序和中序重建二叉树
- [面试] 根据前序和中序重建二叉树,并且中序非递归遍历
- 前序和中序重建二叉树, 树的前序递归,中序递归,后序递归遍历和前序非递归,中序非递归,后序非递归遍历
- 根据前序和中序 构造二叉树
- 根据后序和中序遍历重建二叉树
- 根据先序和中序遍历重建二叉树
- 根据前序和中序序列重建二叉树
- 根据前序和中序序列重建二叉树 Construct Binary Tree from Preorder and Inorder Traversal
- 根据后序和中序遍历重建二叉树