NOJ 建立二叉樹的二叉鍊錶 西工大資料結構

2021-08-18 14:57:57 字數 1828 閱讀 1788

分析一下題目,就是用前序和中序拼乙個二叉樹出來,再後序輸出。

建立二叉樹時,前序中第乙個資料肯定是根節點,然後在中序中這個資料肯定把中序序列分成左半部分和右半部分,左半部分就是這個資料節點的左支,右半部分就是右支,然後再對左支和右支建立二叉樹,構成乙個遞迴。則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...