带重复节点的前序中序二叉树
已知一个二叉树的先序遍历序列和中序遍历序列,但其中一些节点的值可能相同。请你返回所有满足条件的二叉树。二叉树在数组中的顺序是任意的。
输入
[1,1,2],[1,2,1]
输出
[{1,1,#,#,2},{1,#,1,2}]
麻烦的是最后构造出的二叉树不唯一了
看起来并不高明,能过但是我没能写出来的代码
class Solution { public: vector<TreeNode*> myBuildTree(const vector<int>& preorder,const vector<int>& inorder, int preorder_left, int preorder_right, int inorder_left, int inorder_right) { vector<TreeNode*> res; if (preorder_left > preorder_right) { res.push_back(nullptr); return res; } for (int i = inorder_left; i <= inorder_right; i++) { // 在中序遍历序列中查找可能的根节点的索引 if (inorder[i] == preorder[preorder_left]) { int size_of_leftsub = i - inorder_left; vector<TreeNode*> left = myBuildTree(preorder, inorder,preorder_left + 1, preorder_left + size_of_leftsub, inorder_left, i - 1); vector<TreeNode*> right = myBuildTree(preorder, inorder,preorder_left + size_of_leftsub + 1, preorder_right, i + 1, inorder_right); for (TreeNode* left_child : left) { for (TreeNode* right_child : right) { TreeNode* root = new TreeNode(preorder[preorder_left]); root->left = left_child; root->right = right_child; res.push_back(root); } } } } return res; } vector<TreeNode*> getBinaryTrees(vector<int>& preOrder, vector<int>& inOrder) { vector<TreeNode*> res; int n = preOrder.size(); res = myBuildTree(preOrder,inOrder, 0, n - 1, 0, n - 1); return res; } };
本文作者:YaosGHC
本文链接:https://www.cnblogs.com/yaocy/p/17001583.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步