根据中序和前序遍历还原二叉树
Posted jianbo1995
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了根据中序和前序遍历还原二叉树相关的知识,希望对你有一定的参考价值。
思路就是从前序遍历出发,到中序遍历中找到相应的根节点,然后确定左子树和右子树的范围
struct BiNode { int value; BiNode *leftchild; BiNode *rightchild; }; class solution { public: BiNode* BiTree(int *preorder,int *midorder,int length) { if(length < 0 || preorder == nullptr || midorder == nullptr) return nullptr; return constructTree(preorder,preorder+length,midorder,midorder+length); } BiNode* constructTree(int* pre,int* pre_end,int* mid,int* mid_end) { int rootValue = pre[0]; BiNode* root = new BiNode(); root->value = rootValue; root->leftchild = nullptr; root->rightchild = nullptr; if(pre == pre_end) //×ó×ÓÊ÷½áÊø { if(mid == mid_end && mid == pre) return root; else throw std::exception("Invalid input.") } int* root_index = mid; while( root_index <=mid_end &&*root_index != rootValue) root_index++; int left_length = root_index - mid; int* left_end = pre + left_length; if(left_length > 0) { root->leftchild = constructTree(pre+1,pre_end,mid,root_index-1); root->rightchild = constructTree(pre+1,pre_end,root_index+1,mid_end); } return root; } };
最近开学,都没有什么时间继续学习这方面的东西了,o(╥﹏╥)o
以上是关于根据中序和前序遍历还原二叉树的主要内容,如果未能解决你的问题,请参考以下文章
请教,如何在知道中序和前序遍历的情况下,得到后序遍历的结果? 不需要程序,有个图就行。 谢谢。
LeetCode106. Construct Binary Tree from Inorder and Postorder Traversal-通过中序和后续遍历还原二叉树