二叉樹的前序、中序、後序三種中的兩種推另一種
阿新 • • 發佈:2018-12-13
關於二叉樹:
二叉樹之由 中序、後序推前序:
char s1[100], s2[100], ans[100]; int cnt; /*以上為全域性變數*/ void make(int len, char *s1, char *s2) // 中序、後序 推前序 s1中序s2後序 { if (len <= 0) return; int i = strchr(s1, s2[len - 1]) - s1; // 從s1中搜索s2[len-1] 並返回地址,地址減去首地址即為子樹長度 ans[cnt++] = s2[len - 1]; make(i, s1, s2); // 遞迴搜尋左子樹 make(len - i - 1, s1 + i + 1, s2 + i); //遞迴搜素右子樹 存到地址之後 } // ans為目的串
二叉樹之由 前序、中序推前序:
char s1[100], s2[100], ans[100]; int cnt; /*以上為全域性變數*/ void make(int len, char *s1, char *s2, char *s) // 先序、中序推後序 s1為先序 s2為中序 { int i; if (len <= 0) return; // return 必不可少 否則死迴圈 else { for (i = 0; i < len; i++) { if (s1[0] == s2[i]) // 在中序中搜索根節點 實現遞迴 break; } } // 關鍵部分 make(i, s1 + 1, s2, ans); // 搜尋上次搜尋左側部分 make(len - i - 1, s1 + i + 1, s2 + i + 1, ans + i); // 搜尋上次搜尋右側部分 ans[len - 1] = s1[0]; // 後序輸出 把遞迴找出的根節點從後存入 } // ans為目的串