标签:示例 etc 面试 uil 左右 重建 节点 特点 null
题目地址:https://leetcode-cn.com/problems/zhong-jian-er-cha-shu-lcof/
输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
例如,给出
前序遍历 preorder = [3,9,20,15,7]
中序遍历 inorder = [9,3,15,20,7]
返回如下的二叉树:
3
/ \
9 20
/ \
15 7
先序遍历规则:根节点==》左子树==》右子树
中序遍历规则:左子树==》根节点==》右子树
分析题目可知,二叉树中的节点值均是唯一的,不存在重复值。所以,我们可以利用二叉树先序遍历和中序遍历特点,完成如下的工作:
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) { if(preorder.size() == 0 || inorder.size() == 0) return NULL; TreeNode* treeNode = new TreeNode(preorder[0]); int index = distance(begin(inorder), find(inorder.begin(), inorder.end(), preorder[0])); vector<int> left_preorder(preorder.begin() + 1, preorder.begin() + index + 1); vector<int> right_preorder(preorder.begin() + index + 1, preorder.end()); vector<int> left_inorder(inorder.begin(), inorder.begin() + index); vector<int> right_inorder(inorder.begin() + index + 1, inorder.end()); treeNode->left = buildTree(left_preorder, left_inorder); treeNode->right = buildTree(right_preorder, right_inorder); return treeNode; } };
标签:示例 etc 面试 uil 左右 重建 节点 特点 null
原文地址:https://www.cnblogs.com/wzw0625/p/12588884.html