給出先序遍歷和中序遍歷確認一棵二叉樹

2021-08-20 02:58:50 字數 1453 閱讀 8625

#includeusing namespace std;

#define n 100

typedef struct bitnode bitnode,*bitree;

void inittree(bitree& t)

void preorder(bitree& t)

void midorder(bitree& t)

bitree createtree(char *pre, char *mid, int n) //將前序遍歷和中序遍歷不斷以前序遍歷的結點(來確認中序遍歷中該結點的位置)乙個個細分為左右子樹

bitree t; //建立臨時結點

t = new bitnode;

if (t == null) return null;

char c;

int j = 0;

c = pre[0];

t->data = pre[0]; //前序遍歷的第乙個數就是根節點

char lpre[n], rpre[n], lmid[n], rmid[n]; //建立陣列,分別儲存左、右子樹的前序遍歷和中序遍歷

for (int i = 0; i < n; i++) //在中序遍歷中查詢根結點

//cout << j << endl;

for (int i = 0; i < j; i++) //經過上面的操作找到根結點後,將中序遍歷分成左右子樹,

for (int i = 1,k=0; i < j+1; i++,k++) //lpre[1]為左子樹的根結點

for (int i = j+1,k=0; i < n; i++,k++)

int z = n - j-1; //右子樹的長度

t->lchild= createtree(lpre, lmid,j); //用遞迴來確認左子樹,直到子樹長度=0

t->rchild= createtree(rpre, rmid, z); //用遞迴來確認右子樹,知道子樹長度=0;

return t;

}int main()

cout << "請輸入中序遍歷:" << endl;

while (cin >> e && e != '#')

t=createtree(pre, mid,ipre); //

cout << "前序遍歷結果為:";

preorder(t);

cout << endl;

cout << "中序遍歷結果為:";

midorder(t);

system("pause");

}

樹的遍歷 先序遍歷 中序遍歷 後序遍歷

名詞解釋 1 每個元素稱為節點 2 有乙個特定的節點被稱為根節點或樹根 3 除根節點外的其餘資料元素被分為m個互不相交的集合t1,t2,t3.tm 1,其中每乙個集合ti本身也是乙個樹,被稱作原樹的子樹 節點的度 乙個節點含有子樹的個數稱為該節點的度 葉節點或終端節點 度為0的節點稱為葉節點 非終端...

根據後序和中序遍歷輸出先序遍歷

本題要求根據給定的一棵二叉樹的後序遍歷和中序遍歷結果,輸出該樹的先序遍歷結果。輸入格式 第一行給出正整數nn le 30 30 是樹中結點的個數。隨後兩行,每行給出nn個整數,分別對應後序遍歷和中序遍歷結果,數字間以空格分隔。題目保證輸入正確對應一棵二叉樹。輸出格式 在一行中輸出preorder 以...

根據後序和中序遍歷輸出先序遍歷

本題要求根據給定的一棵二叉樹的後序遍歷和中序遍歷結果,輸出該樹的先序遍歷結果。第一行給出正整數n 30 是樹中結點的個數。隨後兩行,每行給出n個整數,分別對應後序遍歷和中序遍歷結果,數字間以空格分隔。題目保證輸入正確對應一棵二叉樹。在一行中輸出preorder 以及該樹的先序遍歷結果。數字間有1個空...