L2 004 這是二叉搜尋樹嗎? (25 分)

2021-09-11 15:53:28 字數 1210 閱讀 8504

一棵二叉搜尋樹可被遞迴地定義為具有下列性質的二叉樹:對於任一結點,

其左子樹中所有結點的鍵值小於該結點的鍵值;

其右子樹中所有結點的鍵值大於等於該結點的鍵值;

其左右子樹都是二叉搜尋樹。

所謂二叉搜尋樹的「映象」,即將所有結點的左右子樹對換位置後所得到的樹。

給定乙個整數鍵值序列,現請你編寫程式,判斷這是否是對一棵二叉搜尋樹或其映象進行前序遍歷的結果。

輸入格式:

輸入的第一行給出正整數 n(≤1000)。隨後一行給出 n 個整數鍵值,其間以空格分隔。

輸出格式:

如果輸入序列是對一棵二叉搜尋樹或其映象進行前序遍歷的結果,則首先在一行中輸出 yes ,然後在下一行輸出該樹後序遍歷的結果。數字間有 1 個空格,一行的首尾不得有多餘空格。若答案是否,則輸出 no。

輸入樣例 1:

78 6 5 7 10 8 11

輸出樣例 1:

yes5 7 6 8 11 10 8

輸入樣例 2:

78 10 11 8 6 7 5

輸出樣例 2:

yes11 8 10 7 5 6 8

輸入樣例 3:

78 6 8 5 10 9 11

輸出樣例 3:

no思路:可以用前序遍歷直接來建二叉排序樹

#includeusing namespace std;

typedef struct node;

typedef node *tree;

struct node

;void insert(tree &bt,int x)

if(xdata)

else if(x>=bt->data)

}vectorp1,p2,po1,po2;

void pre1(tree bt)

}void pre2(tree bt)

}void post1(tree bt)

}void post2(tree bt)

}int main()

pre1(bt);

pre2(bt);

post1(bt);

post2(bt);

if(p==p1)

printf("\n");

}else if(p==p2)

printf("\n");

}else

return 0;

}

L2 004 這是二叉搜尋樹嗎? (25 分)

一棵二叉搜尋樹可被遞迴地定義為具有下列性質的二叉樹 對於任一結點,所謂二叉搜尋樹的 映象 即將所有結點的左右子樹對換位置後所得到的樹。給定乙個整數鍵值序列,現請你編寫程式,判斷這是否是對一棵二叉搜尋樹或其映象進行前序遍歷的結果。輸入的第一行給出正整數 n 1000 隨後一行給出 n 個整數鍵值,其間...

L2 004 這是二叉搜尋樹嗎? (25 分)

l2 004 這是二叉搜尋樹嗎?25 分 一棵二叉搜尋樹可被遞迴地定義為具有下列性質的二叉樹 對於任一結點,所謂二叉搜尋樹的 映象 即將所有結點的左右子樹對換位置後所得到的樹。給定乙個整數鍵值序列,現請你編寫程式,判斷這是否是對一棵二叉搜尋樹或其映象進行前序遍歷的結果。輸入的第一行給出正整數 n 1...

L2 004 這是二叉搜尋樹嗎? 25分

一棵二叉搜尋樹可被遞迴地定義為具有下列性質的二叉樹 對於任一結點,其左子樹中所有結點的鍵值小於該結點的鍵值 其右子樹中所有結點的鍵值大於等於該結點的鍵值 其左右子樹都是二叉搜尋樹。所謂二叉搜尋樹的 映象 即將所有結點的左右子樹對換位置後所得到的樹。給定乙個整數鍵值序列,現請你編寫程式,判斷這是否是對...