根据树的前序遍历与中序遍历构建二叉树
2017-03-15 14:18
141 查看
根据树的前序遍历与中序遍历构建二叉树
平台:VS2013二叉树可以根据其前序遍历及中序遍历唯一确定一棵二叉树,对于前序遍历来说,第一个数字便为树的根,而对于中序遍历来说,找到根节点后,根节点之前的所有数均为左子树,之后的全为右子数,根据这一特点来递归构建二叉树,该示例为此树中没有相同的数字。代码如下:
#include <iostream> #include <vector> #include <algorithm> using namespace std; struct TreeNode{ int data; TreeNode* leftChild=NULL; TreeNode* rightChild=NULL; }; TreeNode* buildTree(vector<int> vPreOrder, vector<int> vInOrder){ TreeNode* tRoot; if (vPreOrder.empty()) return NULL; tRoot = new TreeNode; auto rootId = find(vInOrder.begin(), vInOrder.end(), vPreOrder.at(0)); vector<int> leftInChild; vector<int> rightInChild; for (auto it = vInOrder.cbegin(); it != rootId; ++it) leftInChild.push_back(*it); for (auto it = rootId + 1; it != vInOrder.cend(); ++it) rightInChild.push_back(*it); int leftChildLength = leftInChild.size(); int rightChildLength = rightInChild.size(); vector<int> leftPreChild; vector<int> rightPreChild; for (int i = 1; i < leftChildLength + 1; ++i)leftPreChild.push_back(vPreOrder.at(i)); for (int i = 1; i < rightChildLength + 1; ++i)rightPreChild.push_back(vPreOrder.at(i + leftChildLength)); tRoot->data = vPreOrder.at(0); tRoot->leftChild = buildTree(leftPreChild, leftInChild); tRoot->rightChild = buildTree(rightPreChild, rightInChild); return tRoot; } void prePrint(TreeNode* head){ if (head){ cout << head->data; prePrint(head->leftChild); prePrint(head->rightChild); } } int main(void){ vector<int> vPreOrder{ 1, 2, 4, 7, 3, 5, 6, 8 }; vector<int> vInOrder{ 4, 7, 2, 1, 5, 3, 8, 6 }; TreeNode* tRoot=buildTree(vPreOrder,vInOrder); prePrint(tRoot); cout << endl; return EXIT_SUCCESS; }
相关文章推荐
- 根据树的前序遍历与中序遍历构建二叉树
- 根据前序遍历、中序遍历构建二叉树,并后序遍历输出。
- 由二叉树的中序遍历, 前序遍历, 构建二叉树
- 数据结构——根据后序遍历与中序遍历构建二叉树
- LeetCode:105_Construct Binary Tree from Preorder and Inorder Traversal | 根据前序和中序遍历构建二叉树 | Medium
- 根据一个树的中序遍历和前序遍历数据,还原一个二叉树的思考
- [LeetCode]106 根据中序遍历和后序遍历构建二叉树
- 二叉树的构建 遍历 以及 根据 先序遍历 中序遍历 来构建二叉树
- java实现根据前序遍历构建二叉树(前序遍历、中序遍历、后序遍历)
- 【面试题】剑指Offer-6-根据前序和中序遍历重建二叉树
- 已知二叉树的前序和中序遍历,构建该二叉树
- Offer题6 根据前序和中序构建二叉树
- 根据树的前序遍历、中序遍历、后序遍历中的两种遍历求第三种遍历结果
- LeetCode(Construct Binary Tree from Preorder and Inorder Traversal )根据二叉树的中序遍历和后序遍历重建二叉树
- 重建二叉树(根据前序和中序遍历结果)
- 第四题:根据前序和中序遍历结果重建二叉树(Arrays常用方法)
- 由树的前序遍历,中序遍历建立一颗二叉树,并以后续遍历的方式输出其元素
- 二叉树问题-根据前序遍历结果和中序遍历结果得出后序遍历结果
- 构建二叉树(据前序遍历结果)--- 前序遍历二叉树(递归与非递归)
- 二叉树的基本操作,前序遍历,后续遍历,中序遍历