思路:
二叉樹後序遍歷和中序遍歷 可以確定乙個二叉樹,如果是已知後序和前序遍歷不可以確定二叉樹,
提供的遍歷元素中不能有重複元素
後序遍歷的最後元素是二叉樹根節點,通過中序遍歷,確定根節點下左右子樹,如果有重複元素,
就無法在中序遍歷元素中確定左右子樹了
後序遍歷元素需要從最後元素,向前進行遍歷,再根據中序,確定左右子樹分布位置
/*
*@author: 趙秋然
*@date:2023年2月20日
*@description:中序與後序遍歷序列構造二叉樹
*/#include#includeusing namespace std;
/** * definition for a binary tree node.
* struct treenode
* treenode(int x) : val(x), left(nullptr), right(nullptr) {}
* treenode(int x, treenode *left, treenode *right) : val(x), left(left), right(right) {}
* };
*/class solution
int mid = v[postorder[pe]];
int cha = mid - is;
treenode *root = new treenode(postorder[pe]);
root->left = createtree(inorder, postorder, is, mid - 1, ps, ps + cha - 1);
root->right = createtree(inorder, postorder, mid + 1, ie, ps + cha, pe - 1);
return root;
}treenode *buildtree(vector& inorder, vector& postorder)
int i = 0, n = inorder.size() - 1;
for (i = 0; i <= n; ++i)
return createtree(inorder, postorder, 0, n, 0, n);
}};
如果是中序和前序遍歷,那麼就從前序遍歷起始進行加1操作,**同理一致 根據一棵樹的中序遍歷與後序遍歷構造二叉樹
根據一棵樹的中序遍歷與後序遍歷構造二叉樹。注意 你可以假設樹中沒有重複的元素。例如,給出 中序遍歷 inorder 9,3,15,20,7 後序遍歷 postorder 9,15,7,20,3 返回如下的二叉樹 3 9 20 15 7public int postindex 0 public tre...
根據一棵樹的中序遍歷與後序遍歷構造二叉樹。
根據一棵樹的中序遍歷與後序遍歷構造二叉樹。注意 你可以假設樹中沒有重複的元素。例如,給出 中序遍歷 inorder 9,3,15,20,7 後序遍歷 postorder 9,15,7,20,3 返回如下的二叉樹 3 9 20 15 7private int index2 public treenod...
已知一棵樹前中序遍歷,怎麼求後序遍歷
已知一棵樹的前序遍歷是 youzanstyle 而中序遍歷是 uoznayyltse 怎麼求後序遍歷?我們可以通過前序遍歷得到根節點,通過中序遍歷得到左右子樹。樹根節點是y,左子樹是uozna,右子樹是yltse uozna根節點是o,左子樹是u,右子樹是zna zna根節點是z,沒有左子樹,右子樹...