一棵樹的中序遍歷與後序遍歷構造二叉樹 c 實現

2021-10-19 14:41:16 字數 1194 閱讀 3771

思路:

二叉樹後序遍歷和中序遍歷 可以確定乙個二叉樹,如果是已知後序和前序遍歷不可以確定二叉樹,

提供的遍歷元素中不能有重複元素

後序遍歷的最後元素是二叉樹根節點,通過中序遍歷,確定根節點下左右子樹,如果有重複元素,

就無法在中序遍歷元素中確定左右子樹了

後序遍歷元素需要從最後元素,向前進行遍歷,再根據中序,確定左右子樹分布位置

/*

*@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,沒有左子樹,右子樹...