已知前序(先序)與中序輸出後序:
前序:1, 2, 3, 4, 5, 6(根左右)
中序:3, 2, 4, 1, 6, 5(左根右)
分析:因為前序(根左右)最先出現的總是根結點,所以令root為前序中當前的根結點下標(並且同時把一棵樹分為左子樹和右子樹)。start為當前需要列印的子樹在中序中的最左邊的下標,end為當前需要列印的子樹在中序中最右邊的下標。遞迴列印這棵樹的後序,遞迴出口為start > end。i為root所表示的值在中序中的下標,所以i即是分隔中序中對應root結點的左子樹和右子樹的下標。
先列印左子樹,後列印右子樹,最後輸出當前根結點pre[root]的值。
輸出的後序應該為:3, 4, 2, 6, 5, 1(左右根)
#include using namespace std;
int pre = ;
int in = ;
void post(int root, int start, int end)
int main()
**: 已知前序(先序)與中序輸出後序
已知前序 先序 與中序輸出後序 前序 1,2,3,4,5,6 根左右 中序 3,2,4,1,6,5 左根右 分析 因為前序 根左右 最先出現的總是根結點,所以令root為前序中當前的根結點下標 並且同時把一棵樹分為左子樹和右子樹 start為當前需要列印的子樹在中序中的最左邊的下標,end為當前需要...
已知前序(先序)與中序輸出後序
已知前序 先序 與中序輸出後序 前序 1,2,3,4,5,6 根左右 中序 3,2,4,1,6,5 左根右 分析 因為前序 根左右 最先出現的總是根結點,所以令root為前序中當前的根結點下標 並且同時把一棵樹分為左子樹和右子樹 start為當前需要列印的子樹在中序中的最左邊的下標,end為當前需要...
已知前序(先序)與中序輸出後序
已知前序 先序 與中序輸出後序 前序 1,2,3,4,5,6 根左右 中序 3,2,4,1,6,5 左根右 分析 因為前序 根左右 最先出現的總是根結點,所以令root為前序中當前的根結點下標 並且同時把一棵樹分為左子樹和右子樹 start為當前需要列印的子樹在中序中的最左邊的下標,end為當前需要...