已知後序中序序列求先序序列

2021-07-09 14:39:58 字數 985 閱讀 9169

方法呢,與前一篇一樣,建樹或者不建樹皆可,這裡不做過多說明,直接show code。

way 1.

typedef struct treenode *bintree;

struct treenode

};

bintree buildtree(char *post, char *in, int n)

way 2.

const int maxn = 100;

char pre[maxn], in[maxn], post[maxn];

/*

call: topreseq(0, 0, 0, strlen(post));

*/void topreseq(int postindex, int inindex, int preindex, int n)

char root = post[postindex + n - 1];

int i;

pre[preindex] = root;

for(i = 0; i < n && in[inindex + i] != root; ++i)

;int lenleft = i, lenright = n - i - 1;

topreseq(postindex, inindex, preindex + 1, lenleft); //注意傳參

topreseq(postindex + lenleft, inindex + lenleft + 1, preindex + lenleft + 1, lenright);

}

note: 此演算法正確的前提是保證後序中序序列正確。

已知先序中序序列求後序序列

way 1.由先序和中序遍歷序列確定一棵二叉樹,再後序遍歷得到後序序列。如何確定呢?1.根據先序遍歷的第乙個結點確定根節點 2.根據根節點在中序遍歷序列的位置分割出左右兩個子串行,即根節點的左右子樹 3.對左右子樹按此方法遞迴進行分解。定義二叉樹的資料結構 typedef struct treeno...

已知後序中序,求先序

利用後序遍歷的最後乙個元素 根結點 在中序遍歷中找到它,分割為左子樹和右子樹,然後在後序遍歷中找到子樹的根結點 起點 終點,分別遞迴。int leftrootpo rootpo end rootin 1 左子樹的根結點在後序遍歷中的位置。end rootin 右子樹的結點個數 int leftsta...

已知中序和後序求先序

include include using namespace std struct tnode define len sizeof tnode typedef tnode pbtnodepoint void vcreate string sinorder,string spostorder,pbt...