分析一下題目,就是用前序和中序拼乙個二叉樹出來,再後序輸出。
建立二叉樹時,前序中第乙個資料肯定是根節點,然後在中序中這個資料肯定把中序序列分成左半部分和右半部分,左半部分就是這個資料節點的左支,右半部分就是右支,然後再對左支和右支建立二叉樹,構成乙個遞迴。則abcde badce,可轉化成以下二叉樹:
輸出也選擇遞迴的方法,先左支後右支再
該節點即可。
以下是我的實現:
#include #include struct binarytree
;char preorder[50]=;
char midorder[50]=;
void run ();
void inputbinarytree ();
int getlength ();
int findmid (int left,int right,char mid);
struct binarytree *createbinarytree (int left,int right,int *i);
void printbinarytree (struct binarytree *head);
int main()
void inputbinarytree ()
void run ()
int getlength ()
i++;
}}int findmid (int left,int right,char mid)
}return 0;
}struct binarytree *createbinarytree (int left,int right,int *i)
if (midright=createbinarytree (mid+1,right,i);
}return cur;
};void printbinarytree (struct binarytree *head)
if (head->right)
printf ("%c",head->data);
}
下面是各函式的注釋:
void inputbinarytree ()
int getlength ()
i++;}}
int findmid (int left,int right,char mid)
}return 0;
}
struct binarytree *createbinarytree (int left,int right,int *i)//i用於在整個遞迴中遍歷前序字串,所以採取指標
if (midright=createbinarytree (mid+1,right,i);
}return cur;//返回當前節點位址,便於遞迴
};
void printbinarytree (struct binarytree *head)
if (head->right)
printf ("%c",head->data);//輸出當前節點
}
void run ()
以上就是我的實現,希望給大家帶來幫助。 二叉樹的二叉鍊錶建立
按滿二叉樹方式建立 補充 在此補充按滿二叉樹的方式對結點進行編號建立鏈式二叉樹。對每個結點,輸入i ch。i 結點編號,按從小到大的順序輸入 ch 結點內容,假設是字元。在建立過程中借助乙個一維陣列s n 編號為i的結點儲存在s i 中。define max node 50 typedef stru...
二叉樹 二叉鍊錶
include using namespace std typedef char elemtype int n 0 typedef struct binode binode class bitree bitree binode getroot void preorder binode root 前序...
二叉樹(一) 建立二叉鍊錶儲存的二叉樹
二叉樹的儲存分為順序儲存和鏈式儲存 順序儲存 對於滿二叉樹是非常方便的,沒有空間的浪費,又可以很方便的計算出每乙個結點的左 右孩子及其雙親的下標位置,但是一般的二叉樹不能連續的儲存在一維空間中,所以空結點就占用了一定的空間。二叉樹的順序儲存結構 define max 100 typedef stru...