最開始一直想著在字串上「換順序」,導致思路很不清晰。
其實,就活學活用已經掌握的方法——根據前序和中序遍歷結果來構造二叉樹!
構造二叉樹之後,再對其進行後序遍歷(遞迴的方法)。
要注意的點:
① 題目說輸入「字串」,但是其實一般來說,為了程式設計的方便,可以定義char陣列來儲存字串並進行操作,用法如下:
char a[30]; //可以自設字串大小
scanf("%s",a); //很靈活每次輸入都相當於「重新整理」。注意不加「&」,因為字元陣列名a就是首位址,不需要再取位址!
int l = strlen(a); //求字元陣列儲存的字串長度,用strlen
② 注意二叉樹的結構體定義中,建構函式的寫法。並且注意val值的型別是char不是int了。
#include#includeusing namespace std;
struct btnode
};//將前序和中序遍歷結果進行對照,劃分出左子樹+右子樹,遞迴
btnode * constru(char* pre,int prestart,int preend,char* in, int instart,int inend)
}return head;
}void postorder(btnode* head)
int main()
return 0;
}
復旦14年機試 二叉樹遍歷
第三題 二叉樹遍歷 問題定義 輸入一棵二叉樹,輸出樹的前 中 後序遍歷結果。輸入乙個整數n n 10000 表示樹中有n個結點 編號0 n 1 接下來n行,依次為結點0 結點n 1的左右孩子情況。每行3個整數,f,l,r。l,r為f的左右孩子。l,r如果為 1表示該位置上沒有孩子。分三行分別輸出樹的...
王道機試指南 二叉樹與二叉搜尋樹
二叉樹題目鏈結二叉樹 題意 在乙個完全二叉樹中給出乙個子樹的根和樹的最後乙個結點,求其子樹的結點個數。思路 分為三種情況 其中2 3情況均為乙個滿二叉樹,只需要知道其子樹的深度就可以直接算得,而對於第一種情況,需要先計算出其最後一層的結點樹,再加上以上的結點數。如下 include include ...
構建二叉樹 遍歷二叉樹
陣列法構建二叉樹 public class main public static void main string args 用陣列的方式構建二叉樹 public static void createbintree 把linkedlist集合轉成二叉樹的形式 for int j 0 j 最後乙個父節...