二叉树构造——前序和中序数组
原题在这里:
给两个数组表示前序和中序遍历结果,按此构造二叉树并返回根节点。
analyse:
前序定根,中序分左右,铁板版的我写错了数组名字,瞎搞半小时浪费时间
code:
class Solution { vector<int> pre, mid; int x; int find(int l, int r) { while (l < r && pre[x] != mid[l]) l++; return l; } TreeNode *mk(int l, int r) //当前pre根节点位置为x,那么在mid序列中,找x位置,左右即为子树 { //构造当前子数区间为l,r if (x >= pre.size() || l > r) return nullptr; int y = find(l, r); //当前在mid[l,y-1]+[y+1,r] TreeNode *n = new TreeNode(pre[x++]); n->left = mk(l, y - 1); n->right = mk(y + 1, r); return n; } public: TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) { pre = preorder, mid = inorder; x = 0; //先序定根,中序分左右 return mk(0, pre.size() - 1); } };
【Over】

浙公网安备 33010602011771号